1

这是一个具体的问题,但似乎应该很简单,我正在以错误的方式思考它。

我有一个 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 不再有它们。

4

0 回答 0