循环访问datagridview并读取CheckBoxColumn值

时间:2011-04-09 08:05:04

标签: c# winforms datagridview

我有一个Datagridview,其中包含一个DataGridViewCheckBoxColumn和一些其他TextBox列。我想循环遍历每个单元格,看看是否选中了复选框然后执行某些操作。我使用以下循环方法。有更好的方法吗?

我已经使用过或者条件,因为在某些计算机中它会将.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
                    }

                }

提前致谢。

4 个答案:

答案 0 :(得分:4)

我认为这比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
    }
 }

答案 1 :(得分:1)

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

当处理复选框时,此事件非常有用,因为用户有时会点击检查,然后点击其他地方不提交编辑。

过去这对我有用。

答案 2 :(得分:1)

使用以下代码对我有用:

 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
       }

 }

答案 3 :(得分:0)

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 );   
   }   
}