Řazení v ListView   zodpovězená otázka

VB.NET

Na formu mám ListView s pěti sloupci. Nyní řadím podle prvního sloupce takto:

    Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
        If ListView1.Sorting = SortOrder.Ascending Then
            ListView1.Sorting = SortOrder.Descending
        Else
            ListView1.Sorting = SortOrder.Ascending
        End If
        ListView1.Sort()
    End Sub

Je nějaký způsob, jak řadit podle jiných sloupců. Nebo alespoň, jak zjistím, na kolikété záhlaví (kolikátý sloupec) bylo kliknuto.

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jistě, vytvoří se porovnávací třída implementující IComparer a její instance se potom v ColumnClick přiřazuje vlastnosti ListViewItemSorter u ListViewu. Včetně příkladu je to popsané na MSDN:

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc, funguje to parádně. Akorát škoda takovýho dlouhýho kódu.

Ještě mě napad takovej OffTopic (nedávete mi mínusy :)). Je to sice pomalý, neefektivní a nevím co ještě, ale poměrně krátký a funkční. Stačí přehodit data mezi prvním a požadovaným sloupcem, seřadit a přehodit zpět. Kód by pak vypadal zhruba takto

Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick

        If e.Column = 0 Then
            If ListView1.Sorting = SortOrder.Ascending Then
                ListView1.Sorting = SortOrder.Descending
            Else
                ListView1.Sorting = SortOrder.Ascending
            End If
            ListView1.Sort()
        End If

        If e.Column > 0 Then
            'přehodí texty mezi nultým a požadovaným řádkem
            Prehozeni(0, e.Column) 

            If ListView1.Sorting = SortOrder.Ascending Then
                ListView1.Sorting = SortOrder.Descending
            Else
                ListView1.Sorting = SortOrder.Ascending
            End If
            ListView1.Sort()

            Prehozeni(0, e.Column)
        End If
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ne, to je skutečně nukleární hovadina. Nepoužívat. Dělejte věci tak jak se dělat mají, vymýšlet vlastní řešení je nesmysl. Ten IComparer tam není pro nic za nic, podle toho, co je ve sloupcích za data se bude různě porovnávat - text, číslo, nebo datum má zcela odlišný výsledek porovnávání (a to ovlivňuje výsledné řazení).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback