2011-09-21 48 views
2

我目前正在使用XtraGrid。 我已经将gridControl绑定到DataTable。当我从DataTable中删除一行时,XtraGrid显示更改。但是当我开始处理行索引时,我会遇到奇怪的行为。删除一行后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(),那么测试就会通过。但我宁愿不这样做。

有什么我必须做的,让行索引再次开始匹配?

回答

0

您应该从数据源(dtWorkItems)中将其删除,然后在网格未自动更新时进行更新。网格只是dtWorkItems的一个视图。也许你已经在做Acceptances工作,为什么你不想接受你所做的更改?

+0

我不想AcceptChanges(),因为我想稍后调用GetChanges()。 –

+0

调用'gridViewWorkItemList.RefreshData()'不会使行索引恢复同步。 –