Событие переупорядочения столбца дескриптора DataGridView - PullRequest
6 голосов
/ 02 марта 2011

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

AllowUserToOrderColumns = true;

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

Ответы [ 5 ]

7 голосов
/ 02 марта 2011

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

5 голосов
/ 22 июня 2014

Событие «Использовать 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

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

Ссылка MSDN.

3 голосов
/ 08 октября 2013

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

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();
      }
  }
1 голос
/ 19 февраля 2014

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

0 голосов
/ 02 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...