7

私のコードでは、定期的な間隔の後に DataGridView から行を削除する必要があるため、タイマーが期限切れになったときに次の関数を呼び出します。

private void removeRows(DataGridView dgv) {

    foreach (DataGridViewRow row in dgv.Rows)
    {
        // if some condition holds
        dgv.Remove(row);                
    }
    dgv.Refresh();

}

行が DataGridView から正常に削除されたことはわかっていますが、何らかの理由で行が表示されたままになっています。私が間違っているかもしれないことに関するヒントはありますか?

4

7 に答える 7

3

データ グリッドを再バインドする必要はありませんか?

dgrv.Datasource = [whatever data source];
dgrv.DataBind();

?

于 2009-10-13T14:24:38.517 に答える
3

場合によっては、データ グリッドビューを更新するだけでは不十分で、それを含む親も更新する必要があります。

これを試して:

dgv.Refresh(); // Make sure this comes first
dgv.Parent.Refresh(); // Make sure this comes second

ソースを編集して、新しいデータソースをコントロールにアタッチすることもできます。

于 2009-10-13T14:34:26.250 に答える
2

あなたの理解が正しければ、ユーザーが選択した行を DGV から削除したいということですね。

  1. DataTable の DataRowCollection ではなく、DGV の DataGridViewRowCollection を使用します。DataGridViewRow には、行が選択されているかどうかを示す Selected プロパティがあります。

  2. 行を削除することを決定したら、DataGridViewRowCollection の Remove メソッドを使用して、グリッドから項目を削除できます (例: YerDataGridView.Rows.Remove(row))。

  3. この時点で、項目は DGV から削除されますが、Access DB からはまだ削除されていないことに注意してください。YerTableAdapter.Update(YerDataSet) のように、削除を DB にコミットするには、DataSet/DataTable で TableAdapter Update メソッドを呼び出す必要があります。

通常は、DGV から削除するすべてのアイテムを削除した後でのみ、Update を 1 回呼び出して変更をコミットします。

于 2011-09-22T02:42:09.517 に答える
2

このコードは役に立つかもしれません:

dataGridView.DataSource = null;
dataGridView.Update();
dataGridView.Refresh();
dataGridView.DataSource = SomeDataSource;

お役に立てれば。

于 2015-04-05T02:06:25.480 に答える
2

データグリッドを Observable Collection にバインドしている場合 (そうでない場合はバインドする必要があります)、 INotifyCollectionChanged インターフェイスを実装して、アイテムが追加および削除されたときやリスト全体が更新されたときなど、動的な変更がリスナーに通知されるようにする必要があります。

HTH

于 2009-10-13T14:30:28.727 に答える
1

データ バインドされたグリッドの場合は、グリッドではなくバインディング ソース自体で作業する必要があります。

于 2009-10-13T14:28:03.733 に答える
0

代わりに、バインディング ソースから実際の項目を削除してみてください。

于 2009-10-13T14:47:08.273 に答える