Изправен съм пред подобен проблем със сортирането на 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, това ще накара текста на Header да се премести другаде в OriginalSource, но това е проблем, с който мога да живея засега. Знам, че това е бързо и мръсно решение и вероятно има много по-добри алтернативи, така че всякакви препоръки ще бъдат оценени.
person
Rich
schedule
23.11.2009