从DataGridViewCheckBoxCell获取值

时间:2012-11-29 18:43:26

标签: c# winforms

我正在使用名为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然后比较它,给我一个无效的强制转换异常。

4 个答案:

答案 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)