これは特定の質問ですが、単純であるべきもののように思えますが、私はそれについて間違った方法で考えています。
データテーブルにバインドされた、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は古い行を表示し続けます。