テストされていませんが、これは十分に近いはずです。同じ問題を抱えていたときに、これに関する記事を1、10回読んだことがあります。秘訣は、ボックスがクリックされたときにすぐに編集をコミットすることです。これにより、CellValueChanged
イベントがトリガーされます。その後、そこからカウントを取得できます。
チェックボックスをオンまたはオフにすると、テキストボックスが更新されます。
private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dgv.IsCurrentCellDirty && dgv.CurrentCell.OwningColumn.Name == "MyCheckColumn")
dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1) //just a guard for the header row
return;
if (dgv.Columns[e.ColumnIndex].Name == "MyCheckColumn")
textBox.Text = dgv.Rows.Cast<DataGridViewRow>().Count(r => Convert.ToBoolean(r.Cells["MyCheckColumn"].Value)).ToString();
}
うまくいけば、Linqは機能します。foreach
そうでない場合は、sum変数を使用して昔ながらの方法で実行する必要があります。私はDataGridViewRowCollection
時々気難しいことがあることを知っています。