8

我正在DataGridView尝试ListingGrid激活/停用已DataGridViewCheckBoxCellDataGridViewCheckBoxColumn.

这就是我尝试这样做的方式:

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

        }
    }
}

据我所知,当您检查 a 时DataGridViewCheckBoxCell,单元格的值是否true正确?但它不允许我将值转换为 bool 然后比较它,给我一个无效的强制转换异常。

4

4 回答 4

20

尝试:

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)
    {
    }
于 2012-11-29T18:58:20.623 回答
0

我认为== true没有用,您必须检查您的单元格是否不是DBNull

if (chkchecking.Value != DBNull.Value)
于 2017-08-01T17:12:35.953 回答
0

我通常这样做 bool value = (short)chkchecking.Value == 1

于 2018-05-25T10:51:28.453 回答
0

尝试了不同的选项,相同的代码有时有效,有时却无效。经过大量调试,结果发现根本原因不是复选框获取代码,而是 datagridvew 机制本身。

从未正确接收到活动/选定行中复选框的值。如果 datagridview 只有一行,则无法检测到此问题。

myDataGridViewName.EndEdit();

这必须在读取单元格值之前调用。之后,批准答案中的简单陈述就足够了。

Convert.ToBoolean(chkchecking.Value)

或者

(bool)chkchecking.Value

两者都按预期工作。这个技巧的功劳归功于类似问题的另一个答案。

于 2020-09-21T11:00:25.130 回答