【问题标题】:Hide all rows except the one that is being edited in DataGridView隐藏除 DataGridView 中正在编辑的行之外的所有行
【发布时间】:2011-10-19 15:09:07
【问题描述】:

我想减少用户编辑错误记录的可能性,所以一旦他们开始在 datagridview 中编辑一行,我想隐藏所有行。

我试过了:

foreach (DataGridViewRow dgvr in rdGridView.Rows)
{
    if (dgvr.Index != e.RowIndex )
    {
        dgvr.DefaultCellStyle.BackColor = Color.DarkGray;
        dgvr.ReadOnly = true
    }
}

但这并不能提供太多保护。

我可以更新 DataView 以仅显示该行并将数据视图再次分配给 datgridview 但这会将焦点从单元格中移出,并且单元格不会进入编辑模式。

在上面的 foreach 循环中执行 dgvr.Visible = false 也会产生异常

【问题讨论】:

  • 我会问:为什么要为此使用 DataGridView 呢?看起来更像 ListView 会更合适,具有可编辑的字段。我不认为隐藏所有行的方法是一个很好的解决方案。 ReadOnly 不起作用吗?你说这不是“很大的保护”,但如果他们不能编辑它,那听起来就像你要求的那样。
  • 我说它没有太大的保护作用,因为当用户双击它时,它更改 ReadOnly 字段会使单元格退出编辑模式
  • 能否将单元格的索引保存在变量 iCurrentCellIndex 中,然后在更改 ReadOnly 后将该单元格放回 EditMode?​​span>

标签: c# .net winforms datagridview datatable


【解决方案1】:

也许您应该尝试在 DataGridView 中加载数据,但使用字段从要编辑的行加载数据。这样,您可以将 DataGridView 设置为 ReadOnly,并在单击时将可编辑字段中的数据复制到文本框中,以便用户进行编辑和保存。

【讨论】:

  • 我也想过这个问题,有一个“编辑面板”之类的,但我又回到:如果你不打算允许编辑,为什么要使用 dgv。如果您不想打开编辑,则可以在任意数量的控件中显示数据。
【解决方案2】:

我会寻求更多不同的解决方案。双击一行(无论是哪个单元格,如果您打算编辑一行的整个单元格),您将打开一个新的表单(小窗口),其中包含文本框和一个按钮保存。文本框的数量取决于要编辑的列数。 因此,将 DGV 中的所有数据传递给这个新表单的构造函数,并将数据传递给相应的文本框。

这样您就可以编辑从 DGV 中分离出来的所有数据。顺便说一句,当显示新表单时,使用 ShowDialog() 方法将创建这个只能编辑的新表单(在关闭它之前,用户将无法做任何其他事情,只能编辑此表单上的数据)。

【讨论】:

    【解决方案3】:

    找不到比将所有行设为只读并将它们变为灰色(正在编辑的行除外)更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-22
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      相关资源
      最近更新 更多