1

バインディング ソースにデータ バインドされた DataGridView を使用します。さらに、ユーザーの左端に CheckBoxCol を 1 つ作成します。そこにチェックボックスを入れて並べ替えると、すべてのチェックが消えます。それを回避する方法を知っている人はいますか?

ここにいくつかのコードがあるので、同じページにいます;):

    dtZg_Betr = new DataTable(); // DataTable object
    // [...] SQL SELECT and so on, I cut that stuff a bit
    adapter.Fill(dtZg_Betr); // OleDbAdapter -> fill the table with the SQL SELECT results
    // [...]
    bsZg_Betrn = new BindingSource(); // BindingSource object
    bsZg_Betrn.DataSource = dtZg_Betr;
    dgvZg_Betr.DataSource = bsZg_Betr; // bind data to DataGridView
    DataGridViewCheckBoxColumn dgvCheckBox = new DataGridViewCheckBoxColumn();
    dgvZg_Betr.Columns.Insert(0, (DataGridViewColumn)dgvCheckBox); // add additional checkbox column


    // Later on somewhere else:
    adapter.Update(dtZg_Betr); // OleDbAdapter -> update DB with table's changes

DataGridView には、入力するコード自体はありません。後でもちろんチェックボックスのクリックなどは処理されますが、問題には関係ありません。

よろしくお願いします!

4

2 に答える 2

1

dtResultそのアイテムがチェックされているかどうかを格納するには、追加の列が必要です。データ コントロールは、その情報がデータ ソースに格納できる場合にのみ、投稿間でアイテムに関する情報を保持します。

于 2013-05-15T12:37:05.340 に答える
1

その余分なコラムについての Renan のヒントを参照して、私がしたことは次のとおりです。

私は良い解決策を思いついたと思います:

DataTable に入力した後、bool 列を手動で追加します。

// [...]
adapter.Fill(dtZg_Betr);
bsZg_Betrn = new BindingSource(); // BindingSource object
bsZg_Betrn.DataSource = dtZg_Betr;
dgvZg_Betr.DataSource = bsZg_Betr; // bind data to DataGridView

これは「RowsChanged」イベントには影響せず、追加された列であるため、実行する前に

adapter.Update(dtZg_Betr);

単純に削除/削除できます(追加された列は、削除されてもChangesEventに影響しないため、違いはありません)

dtZg_Betr.Columns[0].Remove(); // or Columns.Delete(...)
于 2013-05-18T18:53:10.953 に答える