Практическое руководство обрабатывать событие изменения порядка столбцов
Я установил для своего объекта DataGridView
AllowUserToOrderColumns = true;
Как я могу обнаружить переупорядочивание столбцов ?
5 ответов
событие" 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
или добавьте обработчик событий программно после завершения кода запуска.
Я предлагаю вам...
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();
}
}
Я не знаю, что именно вы пытаетесь достичь. Если вы хотите добавить поведение сортировки пользовательского столбца, вы можете посмотреть на этот учебник по настраиваемой сортировки столбцов.
в основном, вы ловите MouseDown
событие там, и вы смотрите, нажал ли пользователь на заголовок столбца. Если он это сделал, и ему назначено событие, это может быть выполнено.