C# 选中/取消选中Datagrid复选框时运行代码,并获取更改的值

C# 选中/取消选中Datagrid复选框时运行代码,并获取更改的值,c#,winforms,checkbox,datagridview,C#,Winforms,Checkbox,Datagridview,当datagrid上的复选框处于选中/未选中状态时,我需要执行代码,没有什么要说的了 因此,我: private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); txtCCs.Text = String.Em

当datagrid上的复选框处于选中/未选中状态时,我需要执行代码,没有什么要说的了

因此,我:

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
        txtCCs.Text = String.Empty;
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (Convert.ToBoolean(row.Cells[CC.Name].Value) == true)
            {
                txtCCs.Text += row.Cells[3].Value.ToString().Trim() + ", ";
            }
        }
    }
它在一个新的裸项目中工作,但在我的实际项目中不工作,在那里它运行但看不到更改的值。因此,如果我单击1个框,什么也不会发生,单击另一个框,它现在可以看到第一个框被选中,但是错过了单击以触发它的框。即使我的代码中有committedit


编辑:我完全删除了CellContentClick代码并删除了该函数,现在它可以工作了。不确定问题是什么,因为它仍然会运行,只是不做承诺

您需要先提交编辑:

void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {
  dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
  txtCCs.Text = String.Empty;
  foreach (DataGridViewRow row in dataGridView1.Rows) {
    if (Convert.ToBoolean(row.Cells[CC.Name].Value) == true) {
      txtCCs.Text += row.Cells[3].Value.ToString().Trim() + ", ";
    }
  }
}

值是
=true
还是
=“true”
作为字符串。。?当您添加断点时,它是否会命中您发布的代码。单击复选框时,函数不会运行,但在勾选该复选框后,我单击同一行,函数将运行,并且值将=true作为bool并执行其操作。签出您是机器人吗,正如我明确说过的,这不是我需要的,也不起作用。该页面甚至说它不适用于复选框。但是,它确实提到了“CellValueChanged”,我正在尝试使用它,但是当我将我在帖子中显示的代码放入“CellValueChanged”函数时,它给出了一个错误提示:“索引超出范围”我不理解,因为它的功能应该与cellContentClick相同,不会出现错误。你需要发布更多的代码,让任何人都能理解它。我建议在初始化网格并设置其属性以及连接到的任何其他网格事件的地方发布代码。不,这只是我当前拥有的,它只是看不到更改的值。代码运行了,但它只是没有看到值有什么不同。@Tom这不是我看到的。我所做的每一个复选标记更改都会立即更新屏幕上的文本。我确实觉得有什么东西弄乱了它,但我有一个真正的基本表单,它的功能就像我所说的:/@Tom根据你问题顶部的评论,当你点击复选框时,CellContentClick将运行。您是否已将事件正确地连接起来?我同意@LarsTech的说法,有其他东西正在干扰。如果
.Cells[3]
列的单元格中已经有值,那么您应该看到字符串更新了所有选中的行,包括刚才选中的行。我使用
CellValueChanged
事件确认它正在工作。