C# 为什么在退出编辑模式时对我的datagridview行进行排序?

C# 为什么在退出编辑模式时对我的datagridview行进行排序?,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个dataGridView控件,其SelectionMode属性设置为CellSelect。我正在使用CellBeginEdit和CellEndEdit方法获取编辑前后的值。在这两种情况下,我一直在使用下面的方法来获取所讨论的单元格 dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] 例如,如果编辑第一行,CellBeginEdit和CellEndEdit中的e.RowIndex和e.ColumnIndex都为零。如果按enter键结束

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

dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]
例如,如果编辑第一行,CellBeginEdit和CellEndEdit中的e.RowIndex和e.ColumnIndex都为零。如果按enter键结束编辑,则所需的单元格就在CellEndEdit中(第0行,第0列)。所有这些都是意料之中的

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

行永远不会以可视方式更改位置,在CellBeginEdit中将列的SortMode属性设置为NotSortable不会影响行为


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

在尝试了许多不同的解决方法后,我找到了一种有效的方法:

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

        if (cell.IsInEditMode)
        {
            ...
        }
    }
希望这对其他人有帮助