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 をテーブルの最初の 2 つの列に設定します。これと indexMap により、既に存在する行をロードすると古い行が上書きされ、存在しない行をロードすると追加されます。これは完璧です。

私の問題は、辞書を使い終わったら、更新されなかった行 (古い値) を削除し、DataGridView がこれらの表示を停止することを確認することです。これを行う良い方法が見つかりません。古い値を追跡し、データをロードしてから、データ テーブルと対応する DataGridView から古い値を削除する方法について提案がある人はいますか? 私はうまくいくはずだと思うことを試しましたが、DataTableにはもう行がありませんが、DataGridViewは古い行を表示し続けます。

4

0 に答える 0