编辑绑定的 DataGridView 后防止列自动排序

Posted

技术标签:

【中文标题】编辑绑定的 DataGridView 后防止列自动排序【英文标题】:Preventing column auto sort after editing a bound DataGridView 【发布时间】:2009-06-26 13:42:16 【问题描述】:

我有一个 DataGridView,它有一个 DataTable 作为数据源。 每当我对列进行排序然后编辑单元格时,在编辑列之后,列会自动排序,因此最近编辑的单元格不再位于可查看区域中。有什么办法可以防止这种自动排序发生,并且只在我点击列时进行排序?

非常感谢。

达林

【问题讨论】:

【参考方案1】:

我认为没有办法阻止排序,但是您可以在更新前存储网格的行、列和排序值,然后在更新后恢复它们。

这是我使用的一些代码:

Friend Sub refreshGrid()
    Dim row As Integer
    Dim col As Integer
    Dim gridCol As Integer
    Dim gridColsToHide As Integer
    Dim rowCountOrig As Integer
    Dim rowCountNew As Integer

    row = dgvReadOnly.CurrentRow.Index
    col = dgvReadOnly.CurrentCell.ColumnIndex
        Dim sortVal As String

        sortVal = _setSource.DefaultView.Sort
        rowCountOrig = _setSource.Rows.Count
        _setSource = _displaySet.displaySetTable
        rowCountNew = _setSource.Rows.Count
        setRowFilter()
        _setSource.DefaultView.Sort = sortVal
        If (rowCountNew > rowCountOrig) Then  ' added new row
            row = dgvReadOnly.RowCount - 1  ' new row is at bottom of grid, but skip * row
        End If
    dgvReadOnly.DataSource = Nothing
    dgvReadOnly.DataSource = _setSource
    If row >= dgvReadOnly.RowCount - 1 Then   ' after delete
        row = dgvReadOnly.RowCount - 2
    End If
    If row >= 0 Then        ' if didn't delete all rows matching filter
        dgvReadOnly.CurrentCell = dgvReadOnly(col, row)
    End If
End Sub

【讨论】:

【参考方案2】:

我不知道这是否有效,但听起来可能。

尝试设置每个列的sortMode(DataGridView.Columns(1).sortMode)在选择单元格式编辑时,将其设置为自动完成编辑后,将其设置为“自动”。

【讨论】:

以上是关于编辑绑定的 DataGridView 后防止列自动排序的主要内容,如果未能解决你的问题,请参考以下文章

图解DataGridView编辑列

怎么让datagridview不自动修改绑定的datatable

c# datagridview 滚动条问题

如何实现c# winform DataGridView添加一行,添加数据后,保存到数据库?

【vb.net】datagridview绑定数据后 数据变化触发事件

如何在不使用 datagridview 的情况下编辑绑定到组合框的数据表中的数据?