这是一个具体的问题,但似乎应该很简单,我正在以错误的方式思考它。
我有一个 Winform 中的 DataGridView,它绑定到一个数据表。我不断地将数据加载到此数据表中以显示(刷新)。我这样做如下(简化):
public void FillTable( DataTable table, List<MyObject> parameters)
{
var lastParent = string.Empty;
var index = 0;
table.BeginLoadData( );
foreach ( var parameter in parameters )
{
if ( parameter.ParentName != lastParent )
{
lastParent = parameter.ParentName;
index = 0;
}
LoadRow( table, parameter, index++);
}
table.EndLoadData( );
}
protected virtual void LoadRow( DataTable table, MyObject objectname, int index)
{
indexMap[objectname] = index;
table.LoadDataRow( new object[] { stuff }, LoadOption.OverwriteChanges );
}
public void RefreshParameters( Dictionary<MyObject, string> incomingParameters )
{
foreach ( var value in incomingParameters.Keys )
{
LoadRow( MyDataTable, value, incomingParameters[value], indexMap[value], true );
}
}
这一切都很好。当我初始化我的数据表时,我将它的 PrimaryKey 设置为我表的前两列。这和 indexMap 使得当我加载已经存在的行时,它会覆盖旧行,当我加载不存在的行时,它会添加它。太棒了。
我的问题是,一旦我完成了我的字典,我想删除没有刷新的行(旧值),并确保我的 DataGridView 停止显示这些。我找不到这样做的好方法。有没有人对跟踪旧值、加载数据、然后从数据表和相应的 DataGridView 中删除旧值的方法有任何建议?我已经尝试过我认为应该可以工作的东西,但是 DataGridView 继续显示旧行,即使 DataTable 不再有它们。