DataGridViewCheckBoxColumn など、いくつかの異なるフォームを入力する DataGridView dgView があります。イベントを処理するために、追加しました
private void InitializeComponent()
{
...
this.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgView_CellClick);
...
}
実装は次のようになります。
private void dgView_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (Columns[e.ColumnIndex].Name == "Name of CheckBoxColumn") // this is valid and returns true
{
Console.WriteLine("Handle single click!");
// How to get the state of the CheckBoxColumn now ??
}
}
これは私が立ち往生しているところです。私はすでにさまざまなアプローチを試しましたが、まったく成功しませんでした:
DataGridViewCheckBoxColumn cbCol = Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxColumn; // does not work
DataGridViewCheckBoxColumn cbCol = (DataGridViewCheckBoxColumn)sender; // nor this
if (bool.TryParse(Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString(), out isBool)) // nor this
{ ... }
この CheckBoxColumn の State を取得する方法を教えてください。また、CheckBoxColumn を直接アドレス指定する他のイベントは存在しますか? (「ValueChanged」など)
更新: アプローチ
DataGridViewCell dgvCell = Rows[e.RowIndex].Cells[e.ColumnIndex];
Console.WriteLine(dgvCell.Value);
少なくとも、セルをクリックして値が変更される (または変更されない)前の時点で true / false を返します。しかし、全体として、CheckBoxColumn に直接対処するソリューションが必要です。
解決策: 答えが明白すぎて見えない場合があります。私が直面していた問題は、セルをクリックしてチェックボックスをクリックすると、イベント「CellClick」がトリガーされることでした。したがって、適切な処理は、代わりに「CellValueChanged」イベントを使用することです。
private void InitializeComponent()
{
...
this.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgView_CellValueChanged);
...
}
チェックボックスの値を決定するには、上記と同じ方法を使用します。
if (e.ColumnIndex != -1 && Columns[e.ColumnIndex].Name == "Name of Checkbox")
{
bool cbVal = Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}