我目前正在使用 XtraGrid。我已将 gridControl 绑定到 DataTable。当我从 DataTable 中删除一行时,XtraGrid 会显示更改。但是当我开始处理行索引时,我得到了奇怪的行为。
这是(大致)我用来删除行的代码。
DataTable dtWorkItems;
...
gridWorkItemList.DataSource = dtWorkItems;
...
int currRowHandle = gridViewWorkItemList.FocusedRowHandle;
int currRowIndex = gridViewWorkItemList.GetDataSourceRowIndex(currRowHandle);
DataRow theRow = gridViewWorkItemList.GetDataRow(currRowHandle);
theRow.Delete();
但是这个测试后来失败了:
int rowHandle = gridViewWorkItemList.FocusedRowHandle;
int rowIndex = gridViewWorkItemList.GetDataSourceRowIndex(rowHandle);
DataRow dr1 = gridViewWorkItemList.GetDataRow(rowHandle);
DataRow dr2 = dtWorkItems.Rows[rowIndex];
if (dr1 != dr2)
; // Failure
实际上,dr2 的状态是“已删除”。
如果我在 dtWorkItems 上执行 AcceptChanges(),那么测试将通过。但我宁愿不这样做。
我需要做些什么来让行索引重新开始匹配吗?