为什么退出编辑模式时我的datagridview行会被排序?

时间:2014-05-19 20:59:50

标签: c# winforms datagridview

我有一个dataGridView控件,其SelectionMode属性设置为CellSelect。我正在使用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中获取我编辑的行的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

好吧,在尝试了许多不同的解决方法之后,我发现了一个有效的方法:

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

        if (cell.IsInEditMode)
        {
            ...
        }
    }

希望这有助于其他人。