Я столкнулся с аналогичной проблемой сортировки WPF Listview/Gridview, и у меня есть некоторые ограничения, которые затрудняют реализацию предоставленных решений CSharp. По сути, у меня есть существующее приложение ASP.NET с тысячами строк отлаженного кода VB, а также рабочий SQL для базы данных с более чем 100 таблицами и некоторыми очень сложными соединениями. Мне нужно написать Windows .exe на основе того же приложения, но я хочу использовать WPF для реализации аналогичного графического внешнего вида.
Закончив с заявлением об отказе от ответственности, я столкнулся с проблемой сортировки и искал в Интернете все замечательные общие концепции, подобные приведенным выше, и пытался преобразовать их из CS в VB. Я опытный программист, но я обнаружил, что это просто вне моей досягаемости, поэтому я обратился в другое место и вместо этого разработал свой собственный вид. Это, вероятно, ужаснет пуристов, но я прагматик, и создание коммерческого приложения имеет приоритет.
Чтобы отсортировать сетку, я решил просто использовать события мыши в заголовках столбцов. DoubleClick для сортировки по возрастанию и MouseRightButtonUp для сортировки по убыванию.
<GridViewColumn Header="Project Name   " Width="300" >
Private Sub ListViewGrid_MouseDoubleClick(
ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles ListingDG.MouseDoubleClick
Try
Dim mouseHdrClick As String = DirectCast(DirectCast(e.OriginalSource, System.Object), System.Windows.Controls.TextBlock).Text
Dim SqlOrderBy As String = ""
Select Case UCase(mouseHdrClick.Trim)
Case UCase("Product Name")
SqlOrderBy = " ORDER BY Product_Name"
Затем я просто перезагружаю ListViewGrid, используя строковую переменную SqlOrderBy. Единственная проблема, с которой я столкнулся, заключалась в том, что мне пришлось щелкнуть текст заголовка в заголовке столбца, чтобы он заработал. Я решил это, просто добавив символ пробела XML ( 
), чтобы заполнить ширину столбца. Команда .Trim
снова очищает их для работы Select Case. Я до сих пор не понял, как добавить маленькие стрелки вверх и вниз, но здесь важна функциональность, поскольку сейчас это просто косметические штрихи.
<GridViewColumn Header="Project Name   " Width="300">
Наконец, позвольте мне добавить, что я полностью осознаю, что если я изменю структуру Gridview, это приведет к тому, что текст заголовка переместится в другое место в OriginalSource, но это проблема, с которой я пока могу мириться. Я знаю, что это быстрый и грязный обходной путь, и, вероятно, есть гораздо лучшие альтернативы, поэтому любые рекомендации будут оценены.
person
Rich
schedule
23.11.2009