DataGridVeiw (WinForm) - определяет, когда строки были переупорядочены - PullRequest
0 голосов
/ 02 апреля 2011

В одном из наших приложений WinForm мы используем DataGridView с включенной сортировкой столбцов и SortDescription.

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

Мне нужно получить доступ к DataGridRows ДО того, как они будут нарисованы, но после их сортировки. Я знаю, что мог бы использовать DataGridView.RowPrePaint (), но это похоже на излишество. Она срабатывает, когда мышь наводит курсор на определенные ячейки и т. Д. Мне просто нужно добраться до строк, когда порядок изменился. Я подумал, что, возможно, смогу обработать событие «Sorted» в DGV, но оно срабатывает только после того, как пользователь щелкает один из заголовков столбцов, но мне нужно попасть в строки, когда DGV применяет любые существующие столбцы Sort или SortDescription. По сути, строки могут быть переупорядочены (отсортированы автоматически) после того, как один из ячеек отредактирован, DGV отсортирован по ИЛИ после того, как строка преобразована с помощью RowEdit «Шаблон».

Сегодня я немного погуглил и не выдвинул никаких предложений.

Любой совет? (Кроме обработки события DataGridView.RowPrePaint ....)

Ответы [ 2 ]

0 голосов
/ 04 апреля 2011

Я нашел ответ. Это точная проблема, с которой я сталкиваюсь (из MSDN):

Когда элемент управления DataGridView содержит как связанные, так и несвязанные столбцы отсортирован, значения в несвязанных столбцах не могут быть сохранены автоматически. Чтобы поддерживать эти значения, вы должны реализовать виртуальный режим, установив для свойства VirtualMode значение true и обработав События CellValueNeeded и CellValuePhed.

Дополнительные сведения см. В разделе Как реализовать виртуальный режим в Windows. Формы DataGridView Control. Кроме того, сортировка по несвязанным столбцам в связанном режиме не поддерживается.

Надеюсь, это поможет.

С уважением, Линда Лю

0 голосов
/ 02 апреля 2011

Я не уверен, что это работает, но на вашем месте я бы сохранил событие RowPrePaint ().

Установить флаг

bool RowSorted;

Установить переменную RowSorted true в функции сортировки и снова запустить событие RowPrePaint в функции сортировки после сортировки строк.Функция RowPrePaint Я бы проверил флаг.Если это правда, закрасьте строки;если ложь e.Handled = true;

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