DataGridView处理列重新排序事件

时间:2011-03-02 13:29:50

标签: c# .net datagridview

我为我的DataGridView对象设置了

AllowUserToOrderColumns = true;

如何检测重新排序的列?

5 个答案:

答案 0 :(得分:7)

处理此事件是否符合您的要求?

答案 1 :(得分: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

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

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

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

The MSDN link.

答案 2 :(得分:3)

我建议你......

1 - 执行一个静态int变量。

2 - 在处理程序:: ColumnHeaderMouseClick

中影响此变量

3 - 在处理程序:: Sorted

中选择带有此变量的行

示例:

  private static int idRequetePourtriage = -1;


  private void dgvRequete_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
  {
      if (dgvRequete.SelectedRows.Count > 0)
          idRequetePourtriage = Convert.ToInt32(dgvRequete.SelectedRows[0].Cells[TEXT_colNameIdRequete].Value.ToString());

  }

  private void dgvRequete_Sorted(object sender, EventArgs e)
  {
      desactivateGridSelected();


      int rowCount = 0;
      Boolean isFind = false;

      while (rowCount < dgvRequete.Rows.Count && !isFind)
      {
          if (idRequetePourtriage == Convert.ToInt32(dgvRequete.Rows[rowCount].Cells[TEXT_colNameIdRequete].Value.ToString()))
          {
              isFind = true;
              activateGridSelected();

              dgvRequete.Rows[rowCount].Selected = true;
          }
          rowCount++;
      }

      if (!isFind)
      {
          activateGridSelected();
      }
  }

答案 3 :(得分:1)

使用ColumnDisplayIndexChanged事件

答案 4 :(得分:0)

我不知道你到底想要达到的目标。如果要添加自定义列排序行为,可以查看this tutorial on customizable column sorting

基本上,您在那里捕获MouseDown事件,然后查看用户是否单击了列标题。如果他这样做并且分配了一个事件,则可以执行此操作。