【问题标题】:Why are my datagridview rows being sorted when exiting edit mode?为什么退出编辑模式时我的 datagridview 行被排序?
【发布时间】:2014-05-19 20:59:50
【问题描述】:

我有一个将 SelectionMode 属性设置为 CellSelect 的 dataGridView 控件。我正在使用 CellBeginEdit 和 CellEndEdit 方法来获取编辑前后的值。在这两种情况下,我一直在使用以下方法来获取相关单元格。

dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]

例如,如果我编辑第一行,e.RowIndex 和 e.ColumnIndex 在 CellBeginEdit 和 CellEndEdit 中都为零。如果我按 Enter 键结束编辑,则所需的单元格就在 CellEndEdit 中(第 0 行,第 0 列)。这一切都在意料之中。

但是,如果我在打开排序的情况下编辑列,并通过单击另一行上的单元格来结束编辑,则在调用 CellEndEdit 之前,这些行会按字母顺序重新排序。因此,即使 e.RowIndex 和 e.ColumnIndex 的事件参数仍然包含零,我编辑的行可能不在该索引处。

行在视觉上永远不会改变位置,并且在 CellBeginEdit 中将列的 SortMode 属性设置为 NotSortable 不会影响行为。

这是微软的错误还是我遗漏了什么?此外,如果这种行为是不可避免的,那么在 CellEndEdit 中获取我编辑的行的最佳方法是什么?

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    好吧,在尝试了许多不同的解决方法之后,我找到了一个可行的方法:

        private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewCell cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    
            if (cell.IsInEditMode)
            {
                ...
            }
        }
    

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2016-01-02
      • 2012-04-05
      相关资源
      最近更新 更多