Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check/Uncheck a checkbox on datagridview

Tags:

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); 
like image 747
user1647667 Avatar asked Nov 12 '12 05:11

user1647667


People also ask

How to Check CheckBox is checked in DataGridView in c#?

You should use Convert. ToBoolean() to check if dataGridView checkBox is checked.

How to Check and uncheck CheckBox in GridView in vb net?

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 ...


2 Answers

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();     } } 
like image 170
Mark Hall Avatar answered Sep 23 '22 21:09

Mark Hall


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;             }         }     } } 
like image 29
Kevin Denham Avatar answered Sep 22 '22 21:09

Kevin Denham