【问题标题】:DataGridView.Editmode = EditOnEnter. How to Select the row to Delete it?DataGridView.Editmode = EditOnEnter。如何选择要删除的行?
【发布时间】:2010-07-08 19:56:18
【问题描述】:

当我使用 EditMode = EditOnEnter 时,当我选择行时,单元格进入编辑模式。

用户很难选择行选择器来删除行。

你知道什么技巧吗?

【问题讨论】:

    标签: c# .net vb.net datagridview


    【解决方案1】:

    我试试这个技巧:

    如果用户单击行标题,请将 EditMode 更改为 EditOnKeystrokeOrF2 并结束编辑。

    如果用户单击其他位置,请将 EditMode 更改为 EditOnEnter并开始编辑。


    Private Sub dgv2_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv2.CellClick
        If e.ColumnIndex = -1 Then
           dgv2.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
           dgv2.EndEdit()
        ElseIf dgv2.EditMode <> DataGridViewEditMode.EditOnEnter Then
           dgv2.EditMode = DataGridViewEditMode.EditOnEnter
           dgv2.BeginEdit(False)
        End If
    End Sub
    

    【讨论】:

    • 这真的很有用,我将它与 'CellPreviewKeyDown' 事件结合起来,允许按 ESC 键离开单元格编辑模式
    • 我也发现这很有用,但是如果有一个单元格已经处于编辑模式,并且我选择了多行要删除,它会使其中一行处于编辑模式,所以删除不再起作用.然后我将此代码移至CellMouseUp 事件,它按我想要的方式工作。谢谢!
    【解决方案2】:

    你应该明白你的程序不能真正读懂用户的想法,并理解什么时候进入编辑模式,但什么时候不这样。

    用户可以按Escape键取消编辑模式,然后可以删除行。您也可以选择其他 DataGridViewEditMode(参见 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridvieweditmode.aspx),例如 DataGridViewEditMode.EditOnKeystroke 或 EditOnKeystrokeOrF2,从可用性的角度来看,它们都很好。

    【讨论】:

    • 我知道所有其他模式。用户想要 Excel 模式之类的。我只在经常使用的 DGV 上使用 EditOnEnter。我知道如何删除一行,但指导每个用户这种行为.... Esc 键可以取消编辑,但在此模式下重新进入编辑模式。我不明白为什么选择 RowSelector,不要结束编辑模式。解决方案是将光标移动到不可编辑的单元格。
    【解决方案3】:

    这确实需要在 MouseDown 上完成。在 MouseUp 上触发单元格点击事件:

    Private Sub ProductsGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles ProductsGrid.MouseDown
        Dim grid = DirectCast(sender, DataGridView)
        Dim info = grid.HitTest(e.X, e.Y)
    
        If into.Type = DataGridViewHitTestType.RowHeader OrElse info.Type = DataGridViewHitTestType.TopLeftHeader Then
            grid.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
            grid.EndEdit()
        ElseIf grid.EditMode <> DataGridViewEditMode.EditOnEnter Then
            grid.EditMode = DataGridViewEditMode.EditOnEnter
        End If
    End Sub
    

    还有更多工作要做,包括处理 Tab 键行为。这种行为(以及上述修改)可能最好在继承 DataGridView 的用户控件中完成。

    【讨论】:

      【解决方案4】:

      您可以将焦点更改为父控件。这将强制单元格结束编辑,而无需更改模式本身。

      例如,如果您选择多个单元格,此 sn-p 将退出编辑模式。

      protected override void OnSelectionChanged(EventArgs e)
      {
          base.OnSelectionChanged(e);
      
          if (SelectedCells.Count > 1)
          {
              // leave edit mode
              Parent?.Focus();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-09
        • 2015-10-23
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多