DataGridView复选框列 – 值和function

我在C#表单中为DataGridView添加了一个复选框列。 该function需要是动态的 – 您选择一个客户并显示他们可以维修的所有物品,并选择您希望这次服务中的哪一个。

无论如何,代码现在将添加一个chckbox到DGV的开头。 我需要知道的是:

1)如何制作它以便默认“检查”整列? 2)当我点击DGV正下方的按钮时,如何确保仅从“已检查”行获取值?

这是插入列的代码:

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn(); doWork.HeaderText = "Include Dog"; doWork.FalseValue = "0"; doWork.TrueValue = "1"; dataGridView1.Columns.Insert(0, doWork); 

接下来呢? 任何帮助将不胜感激!

  1. 没有办法直接这样做。 将数据放入网格后,可以遍历行并检查每个框,如下所示:

     foreach (DataGridViewRow row in dataGridView1.Rows) { row.Cells[CheckBoxColumn1.Name].Value = true; } 
  2. Click事件可能如下所示:

     private void button1_Click(object sender, EventArgs e) { List rows_with_checked_column = new List(); foreach (DataGridViewRow row in dataGridView1.Rows) { if (Convert.ToBoolean(row.Cells[CheckBoxColumn1.Name].Value) == true) { rows_with_checked_column.Add(row); } } // Do what you want with the check rows } 
 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell(); ch1 = (DataGridViewCheckBoxCell)dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0]; if (ch1.Value == null) ch1.Value=false; switch (ch1.Value.ToString()) { case "True": ch1.Value = false; break; case "False": ch1.Value = true; break; } MessageBox.Show(ch1.Value.ToString()); } 

查找datagridview中是否选中复选框的最佳解决方案。

这是这个问题的单线答案

 List list = DataGridView1.Rows.Cast().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList(); 

我花了很长时间才弄清楚如何做到这一点,而不必遍历所有记录。 我有一个绑定的datagridview-source,除了checkbox-column之外,所有字段都被绑定。 所以我没有/需要一个循环来添加每一行,我不想只为这个purpuse创建一个。 经过多次尝试后我终于明白了。 它实际上也非常简单:

首先,使用自定义复选框单元格将新的.cs文件添加到项目中,例如

DataGridViewCheckboxCellFilter.cs:

 using System.Windows.Forms; namespace MyNamespace { public class DataGridViewCheckboxCellFilter : DataGridViewCheckBoxCell { public DataGridViewCheckboxCellFilter() : base() { this.FalseValue = 0; this.TrueValue = 1; this.Value = TrueValue; } } } 

在此之后,在GridView上添加复选框列,您可以:

 // add checkboxes DataGridViewCheckBoxColumn col_chkbox = new DataGridViewCheckBoxColumn(); { col_chkbox.HeaderText = "X"; col_chkbox.Name = "checked"; col_chkbox.CellTemplate = new DataGridViewCheckboxCellFilter(); } this.Columns.Add(col_chkbox); 

就是这样! 每次将复选框添加到新行时,它们都将设置为true。 请享用!

如果你在CellContentClick事件上尝试它

使用:

 dataGridView1.EndEdit(); //Stop editing of cell. MessageBox.Show("0 = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString()); 

如果你有一个包含多个复选框的gridview ….你应该尝试这个….

 Object[] o=new Object[6]; for (int i = 0; i < dgverlist.RowCount; i++) { for (int j = 2; j < dgverlist.ColumnCount; j++) { DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell(); ch1 = (DataGridViewCheckBoxCell)dgverlist.Rows[i].Cells[j]; if (ch1.Value != null) { o[i] = ch1.OwningColumn.HeaderText.ToString(); MessageBox.Show(o[i].ToString()); } } } 

要测试是否检查了列:

 for (int i = 0; i < dgvName.Rows.Count; i++) { if ((bool)dgvName.Rows[i].Cells[8].Value) { // Column is checked } } 

1)如何制作它以便默认“检查”整列?

 var doWork = new DataGridViewCheckBoxColumn(); doWork.Name = "IncludeDog" //Added so you can find the column in a row doWork.HeaderText = "Include Dog"; doWork.FalseValue = "0"; doWork.TrueValue = "1"; //Make the default checked doWork.CellTemplate.Value = true; doWork.CellTemplate.Style.NullValue = true; dataGridView1.Columns.Insert(0, doWork); 

2)我怎样才能确保我只从“已检查”的行中获取值?

 foreach (DataGridViewRow row in dataGridView1.Rows) { if (row.IsNewRow) continue;//If editing is enabled, skip the new row //The Cell's Value gets it wrong with the true default, it will return //false until the cell changes so use FormattedValue instead. if (Convert.ToBoolean(row.Cells["IncludeDog"].FormattedValue)) { //Do stuff with row } } 

如果你把sql数据库(bit)中的这个列作为数据类型你应该编辑这段代码

 DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn(); doWork.HeaderText = "Include Dog"; doWork.FalseValue = "0"; doWork.TrueValue = "1"; dataGridView1.Columns.Insert(0, doWork); 

有了这个

 DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn(); doWork.HeaderText = "Include Dog"; doWork.FalseValue = "False"; doWork.TrueValue = "True"; dataGridView1.Columns.Insert(0, doWork);