C#でDataGridViewに配置したチェックボックスの状態取得


 DataGridView のカラムにチェックボックスを入れて、チェックボックスをクリックしたときにリアルタイムにDataGridViewの同一行等に対してスタイルを変更したり、カラムに書き込んだりする方法がやっとわかった。
 要するにDataGridViewのCurrentCellDirtyStateChangedイベントで、チェックボックスを配置しているカラムのイベントを捉えて、コミットさせて、そのカラムの値を判定してチェックボックスの状態を取得すればいいわけねぇ。

private void Form1_Load(object sender, EventArgs e)
{
    string[] strItem = {"Desktop PC", "Note PC", "Tablet" };

    for (int i = 0; i < strItem.Length; i++)
    {
        dataGridView1.Rows.Add();
        dataGridView1["Column2", i].Value = strItem[i];
    }
}

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dataGridView1.CurrentCellAddress.X == 0 && dataGridView1.IsCurrentCellDirty)
    {
        // --- Commit!
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
        if (dataGridView1["Column1", dataGridView1.CurrentCellAddress.Y].Value.ToString() == "True")
        {
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                dataGridView1[i, dataGridView1.CurrentCellAddress.Y].Style.BackColor = Color.Red;
            }
            dataGridView1["Column3", dataGridView1.CurrentCellAddress.Y].Value = "購入";
        }
        else
        {
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                dataGridView1[i, dataGridView1.CurrentCellAddress.Y].Style.BackColor = Color.White;
            }
            dataGridView1["Column3", dataGridView1.CurrentCellAddress.Y].Value = null;
        }
    }
}

ソフトウェア開発の素直研究所です。お仕事のご依頼はこちらからどうぞ!