我正在使用名为DataGridView
的{{1}}来尝试激活/停用已在ListingGrid
内的DataGridViewCheckBoxCell
上“已选中”的用户。
这是我尝试这样做的方式:
DataGridViewCheckBoxColumn
据我所知,当您检查foreach (DataGridViewRow roow in ListingGrid.Rows)
{
if ((bool)roow.Cells[0].Value == true)
{
if (ListingGrid[3, roow.Index].Value.ToString() == "True")
{
aStudent = new Student();
aStudent.UserName = ListingGrid.Rows[roow.Index].Cells[2].Value.ToString();
aStudent.State = true;
studentList.Add(aStudent);
}
}
}
时,单元格的值是DataGridViewCheckBoxCell
对吗?但它不允许我将值转换为bool然后比较它,给我一个无效的强制转换异常。
答案 0 :(得分:17)
尝试:
DataGridViewCheckBoxCell chkchecking = roow.Cells[0] as DataGridViewCheckBoxCell;
if (Convert.ToBoolean(chkchecking.Value) == true)
{
}
或
DataGridViewCheckBoxCell chkchecking = roow.Cells[0] as DataGridViewCheckBoxCell;
if ((bool)chkchecking.Value == true)
{
}
答案 1 :(得分:0)
我通常喜欢这样做
bool value = (short)chkchecking.Value == 1
答案 2 :(得分:0)
尝试了不同的选项,相同的代码有时起作用,而另一些时候却没有。经过广泛的调试,原来的根本原因不是复选框获取代码,而是datagridvew机制本身。
活动/选定行中的复选框的值从未正确接收。如果datagridview只有一行,则无法检测到此问题。
myDataGridViewName.EndEdit();
必须在读取单元格值之前调用它。之后,通过已批准答案中的简单陈述即可。
Convert.ToBoolean(chkchecking.Value)
或
(bool)chkchecking.Value
两者都按预期工作。这个技巧的功劳归功于另一个answer的类似问题。
答案 3 :(得分:-1)
我认为== true
无效,您必须检查您的单元格是否不是DBNull:
if (chkchecking.Value != DBNull.Value)