【问题标题】:C# Change datagridview cells by dragging on themC# 通过拖动更改 datagridview 单元格
【发布时间】:2014-11-10 19:33:24
【问题描述】:

我的程序从 DataTable 输出信息,我将表单 sql 数据收集到 DataGridview 中,DGV 中的最后一列是一个复选框。我想知道是否有任何快速的方法/事件可以使用,所以每当用户单击并拖动以进行大选择时(如在图像中,单击第二个单元格并向下拖动),所有选定的单元格都会将其状态更改为如果用户点击了每个单独的复选框?

我们的目标是提供一种快速的批量编辑方法来检查大型选择,因为这比检查每个单独的复选框要容易得多。

如果没有用于拖动选择的事件处理程序,我将如何获得大选择的边界(开始单元格、结束单元格)?

【问题讨论】:

  • 请注意:Windows UI 实现此目的的方法是 1) 选择单元格 2) 按空格键。你试过吗?如果它不能开箱即用,这就是您应该编码的内容。你的计划听起来很不标准,也很不直观..
  • 刚刚测试了一下,发现确实好像开箱不行..
  • 也试过了,按空格键只检查你选择的最后一个框...

标签: c# datagridview


【解决方案1】:

由于标准行为不使用 DGV CheckBoxesCells 没有一点编码,我会这样做,保持正常的 Windows UI 样式,即使用 Space 栏检查(和取消检查)CheckBoxes

private void DGV_KeyDown(object sender, KeyEventArgs e)
{
    if( e.KeyCode == Keys.Space && DGV.CurrentCell.ColumnIndex == yourCheckBoxColumn)
    {
        foreach (DataGridViewCell cell in DGV.SelectedCells)
            if (cell.ColumnIndex == yourCheckBoxColumn)     
                                    cell.Value = !((bool)cell.FormattedValue);
    }
}

我重复检查以避免交叉选择崩溃..

请注意,我决定反转每个复选标记;这样即使是复杂的选择也可以轻松实现。我喜欢。您的里程可能会有所不同:您可能会想要挑选出第一个 Cell 并将所有单元格设置为与其值相反的值。这真的取决于您的用户!

【讨论】:

  • 这是完成我需要做的事情的好方法。当您将最终用户考虑在内时,“直觉”是一个有争议的词,但这应该足够简单,让他们能够处理 - 并且反转选择是我已经计划做的,所以也感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多