【问题标题】:How to check more than one checkbox individually in DataGridView C#如何在DataGridView C#中分别选中多个复选框
【发布时间】:2019-07-17 16:37:22
【问题描述】:

我想知道如何实现这一点,我尝试了许多我在 SO 上找到的解决方案,但都没有奏效

我希望能够检查例如第一个和第二个选项,但是当我检查其中一个时,其他两个未选中,如何避免这种情况?

我想知道我需要更改哪些事件或属性才能单独选择多个复选框,而不是使用主复选框来选择所有复选框,希望您能帮助我,谢谢。

我在datagridview的CellClick事件中尝试了这段代码

var isChecked = (bool)DGVProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

if (isChecked)
{
    foreach (DataGridViewRow row in DGVProductos.Rows)
    {
        if (row.Index != e.RowIndex)
        {
            row.Cells["CheckProducto"].Value = !isChecked;
        }
    }
}

【问题讨论】:

  • @ŇɏssaPøngjǣrdenlarp 查看代码,有验证,但您的解决方案无效
  • 第一步:不要编写你不想要的代码。第二步:决定你的代码如何知道你想要影响哪些行。您可以遍历 DGV.SelecteRows
  • @TaW 第一步:我把它写在这里,这样你就可以看到我之前尝试过的内容
  • 好吧,除了点击的行之外,代码都取消选中。不要那样做。别忘了第 2 步!
  • @TaW 这就是为什么我说我尝试了那个代码,所以我不再使用它了

标签: c# checkbox datagridview


【解决方案1】:

我不确定您的 foreach 循环试图完成什么,但它正在取消选中所有其他未选中行的框。如果您希望单独选中这些框并保持选中状态,请删除 foreach 循环。

【讨论】:

    【解决方案2】:

    不清楚您在那里尝试实现什么,您编写的代码与您描述的完全相反,只需删除该代码,您应该能够检查单个单元格。

    尽管如果您尝试将该列用作选择指示符,因此该列未绑定到任何属性,请注意,这是不可能的,因为该列未绑定到检查 1 个行单元格的对象将自动检查所有行,反之亦然。

    旁注:无论您想实现什么,在用户选中/取消选中复选框时需要运行的代码都应该在 CellContentClick 事件上调用,而不是在 CellClick 事件上调用。 p>

    【讨论】:

    • Cellcontentclick 可能很棘手,并不总是推荐!此外,他可能(或可能不)想一键选中多个复选框。但我们不知道..
    • 我认为您查找 WinForms 的源代码,实际上您会看到 DataGridViewCheckBoxCell 更改为与 CellContentClick 协调的 Check/Uncheck,而不是 CellClick。
    • 嗯,有趣!
    • @Professor Zoom 你看了我的回答了吗?问题确实是因为该列是未绑定列吗?如果是这样,我可能会为您提供解决方法。
    【解决方案3】:

    我找到了解决我想要实现的目标的方法

    private void DGVProductos_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 0)
        {
            if ((bool)DGVProductos.SelectedRows[e.ColumnIndex].Cells["CheckProducto"].Value == false)
            {
                DGVProductos.SelectedRows[e.ColumnIndex].Cells["CheckProducto"].Value = true;
            }
            else
            {
                DGVProductos.SelectedRows[e.ColumnIndex].Cells["CheckProducto"].Value = false;
            }
        }    
    }
    

    这样我可以像问题所说的那样单独检查多个复选框,不确定是否是最好的方法,但这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      相关资源
      最近更新 更多