Delphi 在使用SMDBGrid加载表单时,有些帮助可以跟踪异常

Delphi 在使用SMDBGrid加载表单时,有些帮助可以跟踪异常,delphi,exception,Delphi,Exception,我有一张表格,上面有DB网格。它与普通的TDBGrid一样工作正常,但当我用Scalabium TSMDBGrid替换它时,我开始在加载表单时出现异常 就我所能找到的问题是: 从DFM加载列时,它尝试将第一列上的展开属性设置为False。这是在表单设计器中设置的,除非该列绑定到表示ADT或数组的字段,否则无法更改 出于某种原因,列是在构造函数中创建的,FExpanded设置为true。当读卡器到达这一点时,它调用TColumn.SetExpanded(false),这将执行以下操作: begin

我有一张表格,上面有DB网格。它与普通的TDBGrid一样工作正常,但当我用Scalabium TSMDBGrid替换它时,我开始在加载表单时出现异常

就我所能找到的问题是:

从DFM加载列时,它尝试将第一列上的展开属性设置为False。这是在表单设计器中设置的,除非该列绑定到表示ADT或数组的字段,否则无法更改

出于某种原因,列是在构造函数中创建的,FExpanded设置为true。当读卡器到达这一点时,它调用TColumn.SetExpanded(false),这将执行以下操作:

begin
  if Value <> FExpanded then
  begin
    Grid := GetGrid;
    WasShowing := (Grid <> nil) and Grid.Columns[Grid.SelectedIndex].Showing;
    ...
开始
如果值为FExpanded,则
开始
Grid:=GetGrid;
WasShowing:=(网格为零)和Grid.Columns[Grid.SelectedIndex]。正在显示;
...

不幸的是,此时Grid.SelectedIndex是-1,所以我得到了“异常类EListError,消息为'List index out out bounds(-1)”。这是一个非常明确的不变量:调用SetExpanded时,SelectedIndex不应该是-1。有人知道TSMDBGrid为什么会破坏它,以及我能做些什么来修复它吗?

我会尝试在代码中分配dataset/datasource属性,而不是designtime,这只是一个快速解决方法。

如果designer不这样做,请尝试重新创建列列表。我试图不指定DataSource属性,但它没有改变任何东西。