循环遍历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
}
}
我认为这将比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 );
}
}