刷新时在数据表对象中处置未使用的行

时间:2013-04-15 15:45:55

标签: c# winforms datagridview datatable refresh

这是一个特定的问题,但似乎应该是简单的事情,我正在以错误的方式思考。

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

0 个答案:

没有答案