Can someone help me why it doesn't work? I have a checkbox
and if I click on it, this should uncheck all the checkbox inside the datagridview which were checked before including the user selected checkbox.
Here is the code:
private void chkItems_CheckedChanged(object sender, EventArgs e) { foreach (DataGridViewRow row in datagridview1.Rows) { DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[1]; if (chk.Selected == true) { chk.Selected = false; } else { chk.Selected = true; } } }
the checkbox should not be selected. it should be checked.
here is the added column
DataGridViewCheckBoxColumn CheckboxColumn = new DataGridViewCheckBoxColumn(); CheckBox chk = new CheckBox(); CheckboxColumn.Width = 20; datagridview1.Columns.Add(CheckboxColumn);
You should use Convert. ToBoolean() to check if dataGridView checkBox is checked.
The code is under _CellContentClick, the the line before message box is checking if the clicked/ selected checkbox is unchecked..if the selected checkbox is not yet checked the message box will pop but if the checkbox is checked already the message box will pop up..Then when i hit NO the clicked/checked checkbox will ...
Looking at this MSDN Forum Posting it suggests comparing the Cell's value with Cell.TrueValue.
So going by its example your code should looks something like this:(this is completely untested)
Edit: it seems that the Default for Cell.TrueValue for an Unbound DataGridViewCheckBox is null you will need to set it in the Column definition.
private void chkItems_CheckedChanged(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[1]; if (chk.Value == chk.TrueValue) { chk.Value = chk.FalseValue; } else { chk.Value = chk.TrueValue; } } }
This code is working note setting the TrueValue and FalseValue in the Constructor plus also checking for null:
public partial class Form1 : Form { public Form1() { InitializeComponent(); DataGridViewCheckBoxColumn CheckboxColumn = new DataGridViewCheckBoxColumn(); CheckboxColumn.TrueValue = true; CheckboxColumn.FalseValue = false; CheckboxColumn.Width = 100; dataGridView1.Columns.Add(CheckboxColumn); dataGridView1.Rows.Add(4); } private void chkItems_CheckedChanged(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[0]; if (chk.Value == chk.FalseValue || chk.Value == null) { chk.Value = chk.TrueValue; } else { chk.Value = chk.FalseValue; } } dataGridView1.EndEdit(); } }
I was making my own version of a Checkbox to control a DataGridViewCheckBoxColumn when I saw this post wasn't actually answered. To set the checked state of a DataGridViewCheckBoxCell use:
foreach (DataGridViewRow row in dataGridView1.Rows) { dataGridView1.Rows[row.Index].SetValues(true); }
For anyone else trying to accomplish the same thing, here is what I came up with.
This makes the two controls behave like the checkbox column in Gmail. It keeps functionality for both mouse and keyboard.
using System; using System.Windows.Forms; namespace Check_UnCheck_All { public partial class Check_UnCheck_All : Form { public Check_UnCheck_All() { InitializeComponent(); dataGridView1.RowCount = 10; dataGridView1.AllowUserToAddRows = false; this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvApps_CellContentClick); this.dataGridView1.CellMouseUp += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.myDataGrid_OnCellMouseUp); this.dataGridView1.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.myDataGrid_OnCellValueChanged); this.checkBox1.Click += new System.EventHandler(this.checkBox1_Click); } public int chkInt = 0; public bool chked = false; public void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == dataGridView1.Rows[0].Index && e.RowIndex != -1) { DataGridViewCheckBoxCell chk = dataGridView1.Rows[e.RowIndex].Cells[0] as DataGridViewCheckBoxCell; if (Convert.ToBoolean(chk.Value) == true) chkInt++; if (Convert.ToBoolean(chk.Value) == false) chkInt--; if (chkInt < dataGridView1.Rows.Count && chkInt > 0) { checkBox1.CheckState = CheckState.Indeterminate; chked = true; } else if (chkInt == 0) { checkBox1.CheckState = CheckState.Unchecked; chked = false; } else if (chkInt == dataGridView1.Rows.Count) { checkBox1.CheckState = CheckState.Checked; chked = true; } } } public void myDataGrid_OnCellMouseUp(object sender, DataGridViewCellMouseEventArgs e) { // End of edition on each click on column of checkbox if (e.ColumnIndex == dataGridView1.Rows[0].Index && e.RowIndex != -1) { dataGridView1.EndEdit(); } dataGridView1.BeginEdit(true); } public void dgvApps_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.CurrentCell.GetType() == typeof(DataGridViewCheckBoxCell)) { if (dataGridView1.CurrentCell.IsInEditMode) { if (dataGridView1.IsCurrentCellDirty) { dataGridView1.EndEdit(); } } dataGridView1.BeginEdit(true); } } public void checkBox1_Click(object sender, EventArgs e) { if (chked == true) { foreach (DataGridViewRow row in dataGridView1.Rows) { DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[0]; if (chk.Value == chk.TrueValue) { chk.Value = chk.FalseValue; } else { chk.Value = chk.TrueValue; } } chked = false; chkInt = 0; return; } if (chked == false) { foreach (DataGridViewRow row in dataGridView1.Rows) { dataGridView1.Rows[row.Index].SetValues(true); } chked = true; chkInt = dataGridView1.Rows.Count; } } } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With