DataGridView处理列重新排序事件

Mil*_*los 6 .net c# datagridview

我为我的DataGridView对象设置了

AllowUserToOrderColumns = true;
Run Code Online (Sandbox Code Playgroud)

如何检测重新排序的列?

Ben*_*nCr 7

处理此事件是否满足您的需求?

  • 不确定为什么这个标记为正确,因为它不是.此事件将在许多其他情况下触发,例如重新绑定数据表等. (5认同)
  • 每次用户重新排序列时,这至少会触发两次。一次为起点,一次为结束点,中间的每一列一次。根据您对事件的处理方式,这可能会产生大量开销。 (2认同)

Mmm*_*Mmm 5

"使用ColumnDisplayIndexChanged"事件看起来是正确的.它对我有用.(我添加了一个评论,我有代表.)

该事件的事件处理程序将包含反映该列的新值的e.Column.您正在寻找的属性是DisplayIndex.请注意,事件将针对DisplayIndex已更改的每个列触发.

在vb.net中:

Private Sub data_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles data.ColumnDisplayIndexChanged

    Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name)

End Sub
Run Code Online (Sandbox Code Playgroud)

由于事件将在启动时激活(多次),因此您可能需要添加某种逻辑以防止在添加列或根据先前设置重新排列列时触发:

Private Sub dataAnts_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dataAnts.ColumnDisplayIndexChanged

    If bSortingColumns = False Then
        Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name)
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

或者在启动代码完成后以编程方式添加事件处理程序.

MSDN链接.