C# – DataGridViewCheckboxCell ‘de Checkbox Değer Değişimini Yakalamak

Bir DataGridView üzerinde oluşturduğunuz Checkbox içeren kolonda, Checkbox’ın değerinin değişimini yakalamak istiyorsanız.. DataGridView ‘in iki adet event’ine şu kodları yazmanız gerekebilir. Tabii farklı yollarda mevcuttur. Fakat ben genelde aşağıdaki yöntemi kullanıyorum..

DataGridView’ın;

CurrentCellDirtyStateChanged” olayında, datagridview ‘ın editing(düzenleme, değişiklik yapma) işlemini sonlandırıyorum.
CellContentClick” olayında ise artık elimde işaretlenmiş ya da iaşreti kaldırılmış bir checkbox mevcuttur. İşleyecek kodumuzu buraya dolduruyoruz.. 🙂

Aşağıdaki kod ile DataGridView üzerinde bir checkbox kolon değeri değiştiğinde, checkbox hücresi hariç diğer hücrelerin yazı renginin kırmızı olması ve üstü çizilmesi sağlanmaktadır..


private void dgvItems_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

    if (this.dgvItems.CurrentCell == null) return;

 

    if (this.dgvItems.CurrentCell.GetType() == typeof(DataGridViewCheckBoxCell))

    {

        if (this.dgvItems.CurrentCell.GetType() == typeof(DataGridViewCheckBoxCell))

        {

            bool isSelected = bool.Parse(this.dgvItems.CurrentRow.Cells[0].Value.ToString());

            DataGridViewCellStyle newStyle = new DataGridViewCellStyle();

            newStyle.ApplyStyle(this.dgvItems.RowTemplate.DefaultCellStyle);

 

            if (isSelected)

            {

                newStyle.ForeColor = Color.Red;

                newStyle.Font = new Font(this.dgvItems.RowTemplate.DefaultCellStyle.Font, FontStyle.Strikeout);

            }

 

            foreach (DataGridViewCell cell in this.dgvItems.CurrentRow.Cells)

            {

                if (cell.GetType() != typeof(DataGridViewCheckBoxCell))

                    cell.Style = newStyle;

            }

        }

    }

}

private void dgvItems_CurrentCellDirtyStateChanged(object sender, EventArgs e)

{

    this.dgvItems.EndEdit();

}