循环遍历datagridview并读取CheckBoxColumn值

本文关键字:CheckBoxColumn 读取 遍历 datagridview 循环 | 更新日期: 2023-09-27 17:49:38

我有一个DataGridViewCheckBoxColumn和其他一些文本框列的datagridview。我想循环遍历每个单元格,看看复选框是否被选中,然后做一些事情。我正在使用下面的循环方法。有更好的方法吗?

我使用了or条件,因为在某些计算机中它将.Value显示为Checked,而在某些计算机中它将.Value显示为true。

     foreach (DataGridViewRow row in dataGridView.Rows)
                {
                    if ((bool)(row.Cells["Checkbox"]).Value || (CheckState)row.Cells["Checkbox"].Value == CheckState.Checked)
                    {   
                        // Do something
                    }
                }

循环遍历datagridview并读取CheckBoxColumn值

我认为这将比foreach

快。
 for (int i = 0; i < dataGridView.Rows.Count -1; i++)
 {
    DataGridViewRow row = dataGridView.Rows[i];
    if ((bool)(row.Cells["Checkbox"]).Value 
        || (CheckState)row.Cells["Checkbox"].Value == CheckState.Checked)
    {
         // Do something
    }
 }

使用以下代码为我工作:

 foreach (DataGridViewRow row in dgv_labelprint.Rows)
 {
     if (value.Value == null)
     {
     }
     else 
       if ((Boolean)((DataGridViewCheckBoxCell)row.Cells["CheckBox"]).FormattedValue)
       {
          //Come inside if the checkbox is checked
          //Do something if checked
       }
 }

看一下这个链接DirtyCellChanged,然后您可以跟踪哪些行已被检查并执行您的工作,而不必遍历整个表。

此事件在处理复选框时很有用,因为用户有时单击check,然后不通过单击其他地方提交编辑。

过去这招对我很管用

int subId;   
List<int> olist= new List<int>();   
for (int i = 0; i < gvStudAttend.Rows.Count; i++) 
{       
   bool Ischecked = Convert.ToBoolean(gvStudAttend.Rows[i].Cells["Attendance"].Value);   
   if (Ischecked == true)    
   {   
      subId = gvStudAttend.Rows[i].Cells["SubjectID"].Value.ToString();   
      olist.Add(subId );   
   }   
}