我有一个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
}
}
提前致谢。
答案 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 );
}
}