首页 文章

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

提问于
浏览
2

我有一个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 回答

  • 2

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

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

    希望这有助于其他人 .

相关问题