Практическое руководство обрабатывать событие изменения порядка столбцов

Я установил для своего объекта DataGridView

AllowUserToOrderColumns = true;

Как я могу обнаружить переупорядочивание столбцов ?

5 ответов


обработка этого события делает то, что вам нужно?

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.columndisplayindexchanged.aspx


событие" Use ColumnDisplayIndexChanged " выглядит как правильное. У меня получилось. (Я бы добавил комментарий, у меня была репутация для этого.)

обработчик событий для этого события будет содержать e.Столбец, отражающий новое значение для этого столбца. Имущество вы почувствуете DisplayIndex. Обратите внимание, что событие будет срабатывать для каждого столбца, в котором был изменен DisplayIndex.

In 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

или добавьте обработчик событий программно после завершения кода запуска.

ссылка MSDN.


Я предлагаю вам...

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();
      }
  }

использовать событие ColumnDisplayIndexChanged


Я не знаю, что именно вы пытаетесь достичь. Если вы хотите добавить поведение сортировки пользовательского столбца, вы можете посмотреть на этот учебник по настраиваемой сортировки столбцов.

в основном, вы ловите MouseDown событие там, и вы смотрите, нажал ли пользователь на заголовок столбца. Если он это сделал, и ему назначено событие, это может быть выполнено.