【发布时间】:2011-11-16 19:59:33
【问题描述】:
我有一个 TDBGrid,并有一个通过 TDataSource 关联的客户端数据集。 当我尝试以编程方式重新排列网格的列时,当网格中有一个或多个列时,这可以正常工作。
可以说,我将所有列都设置为 false。因此,网格还没有任何列。 现在,当我将 11 列的索引设置为 0 时。
Columns[iColIndx].Index := iNewColIndex;
// Assume iColIndx = 11 and iNewColIndex = 0
Columns[iNewColIndex].Visible := True;
//Making the column visible
上述列索引的分配没有反映在网格中。如果我尝试将其设置为两次或三次,那么它就会得到反映。我错过了什么吗?
【问题讨论】:
-
您是否尝试先设置
Visible := True;,然后设置Index?可能是顺序更改实际上延迟到网格实际显示(没有看代码,但这是我怀疑的第一件事,也是我尝试的第一个更改)。 -
我也尝试过,但没有运气。列的索引没有改变,但设置可见是正确显示列。在这种情况下,如果我显示索引小于当前显示的另一列,如果我们从列索引的角度来看,列的顺序会发生变化。有什么方法可以强制列更改索引吗?我什至尝试在 TDBGrid 中暴露 ColumnMoved 方法,但它也没有用。
-
更改索引后是否尝试调用
Columns.Update? -
ahmm...我解决了...首先这是我的错误。我已经为网格分配了 OnDrawDataCell 以绘制渐变,但我没有从那里调用 DefaultDrawDataCell。此外,DefaultDrawing 被关闭。在设置 DefaultDrawing 并从 DrawDataCell 事件处理程序中调用 DefaultDrawDataCell 后,它现在工作正常......非常感谢您的支持......
-
如果你已经解决了,那么你应该发布你的答案并接受它......