【问题标题】:Updating the value of a Checkbox column in datagridview in c# by code通过代码更新c#中datagridview中复选框列的值
【发布时间】:2021-06-21 05:18:11
【问题描述】:

我正在尝试通过代码更新 c# 中 datagridview 中的复选框列的值,但它不起作用。这是代码:

public frmShowData()
{
    InitializeComponent();
    dgvAlumnos.AutoGenerateColumns = false;
    dgvAlumnos.ReadOnly = false;
    updateAttendance();
}
public void updateAttendace(){
    foreach (DataGridViewRow r in dgvAlumnos.Rows)
    {
        if (attendance[r.Index] == true)
        {
            r.Cells[2].Value = true;
        }
        else
        {
            r.Cells[2].Value = false;
        }
    }
}

出勤率是我拥有值的布尔数组。

datagridview的第2列是复选框列。

但是,这些更改在 datagriview 中不可见。 我在表单构造中使用此代码

提前致谢。

【问题讨论】:

  • 数据网格的底层来源是什么?您通常必须更改源,然后数据网格应自行更新
  • 顺便说一句,if 这样的语句可以简化 -> 你不需要 if 开头:r.Cells[2].Value = attendance[r.Index];
  • 我建议您复制/粘贴实际代码,而不是重新输入代码以避免输入错误。对于初学者,在表单的构造函数中,将找不到方法updateAttendance();,因为下面的方法拼写不同。
  • 另外,构造函数中的代码有点混乱。构造函数中缺少的是填充数据的网格的“位置”吗?从发布的代码来看,在构造函数的最后一行,当代码调用updateAttendance() 方法时……foreach 循环将永远不会进入,因为网格没有行。除非您没有显示某些内容,否则没有任何更新是有道理的。

标签: c# checkbox datagridview updating


【解决方案1】:

尝试改用 value = true。

foreach (DataGridViewRow r in dgvAlumnos.Rows)
{
    if (attendance[r.Index] == true)
    {
        r.Cells[2].Value = true;
    }
    else
    {
        r.Cells[2].Value = false;
    }
}

【讨论】:

  • 我正在使用选定的值,但 datagridview 不显示更新。我必须将此代码放入事件中吗?
【解决方案2】:

改数据后试试这两个

dgvAlumnos.RefreshEdit();
dgvAlumnos.Refresh();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2023-04-03
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多