У меня есть приложение .NET CF с формой, содержащей сетку данных, которую я привязал к BindingList, используя решение, полученное в основном из этой статьи: http://msdn.microsoft.com/en-us/library/aa480736.aspx
Я подключил его так, чтобы при щелчке заголовка столбца я получал информацию HitTest и проверял тип. Если Type - ColumnHeader, то я инициирую сортировку в базовом BindingList (используя код, аналогичный примеру в приведенной выше ссылке), что, в свою очередь, сортирует DataGrid в соответствии со свойством T, которое я щелкнул. Например. Описание
Это прекрасно работает!
Проблема возникает, когда я теперь щелкаю по своей сетке данных - скажем, у меня есть две строки, после выполнения сортировки ни одна строка не выбрана. Я щелкаю ячейку в строке 1, и у меня есть код, который выбирает всю строку - эта операция выполняется, и все в порядке. Когда я теперь нажимаю строку 2, строка 2 выбирается, и все в порядке, сетка по-прежнему применяет мою сортировку. Если я сейчас снова щелкну строку 1, моя сортировка изменится на противоположную, но, что очень важно, метод «ApplySort» на самом деле не вызывается. Так что же происходит? Это происходит только тогда, когда я нажимаю строку 1, две строки в сетке фактически меняются местами. При выборе строки 2 этого не происходит.
После отладки я вижу, что срабатывает mousedown (в которое я вставил оператор return;), а затем срабатывает MouseUp, который выполняет HitTest и вызывает ApplySort, если был нажат заголовок столбца, чего в данном случае нет. Я заметил, что изменение сортировки происходит * ПОСЛЕ того, как элемент управления покинул событие MouseUp - так что что-то где-то, кажется, меняет состояние моей сетки после завершения MouseDown / MouseUp.
Есть идеи, какое событие / действие может мешать моей сетке? Я в основном хочу знать, могу ли я подавить что-либо и все остальное после того, как я вызвал свой ApplySort.