这是一个特定的问题,但似乎应该是简单的事情,我正在以错误的方式思考。
我在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不再有它们。