Avatar billede Slettet bruger
13. juli 2008 - 16:16 Der er 12 kommentarer og
2 løsninger

Sortere ListView efter kollone som i Windows Explorer?

Hej eksperter,

Hvordan kan jeg sortere indholdet i ListViews (her details) efter en brugervalgt kollone? Jeg ønsker en effekt som i Windows Explorer med pile op- og nedad styret af brugerens klik på knapperne over hver kollone.
Avatar billede Slettet bruger
13. juli 2008 - 22:43 #1
Din liste skal blot implementere IBindingList (IBindingListView for avanceret sortering), så ligger det direkte i ListView (WPF) og DataGridView (Windows Forms). Hvis du anvender .Net 3.0 eller senere kan du anvende ObservableCollection<T> til det ellers start med BindingList<T>. Vær opmærksom på at du skal deaktivere sortering på kolonner, der kan indeholde null (eller håndtere null via IComparable på den klasse, som du skal sortere på).

DataBinder du eller putter du værdierne manuelt i ListViewet?
Avatar billede aaberg Nybegynder
14. juli 2008 - 08:13 #2
Du kan eventuelt bruge dette listview:
http://www.codeproject.com/KB/list/ObjectListView.aspx

Det er et listview med en masse ekstra funktionalitet, f.eks. sortering, og det er uden at du skal programmere noget for at få det til at virke. Dovenskaben længe leve...

:-)

Jeg har med stor succes brugt det i flere projekter.
Avatar billede Slettet bruger
14. juli 2008 - 14:55 #3
Tak :) Smid lige et par svar.
Avatar billede Slettet bruger
14. juli 2008 - 14:56 #4
Ooog dog. goblinhero, kan du ikke uddybe, hvordan jeg skal gøre?
Avatar billede aaberg Nybegynder
14. juli 2008 - 15:23 #5
svar :-)
Avatar billede Slettet bruger
14. juli 2008 - 20:27 #6
Du bliver først lige nødt til at skrive om du bruger databinding :).
Avatar billede Slettet bruger
14. juli 2008 - 21:01 #7
Jeg ved ikke engang, hvad databinding er :P
Avatar billede Slettet bruger
14. juli 2008 - 21:33 #8
Hehe ok - DataBinding er når du uden at skrive et gram kode, gerne vil have opdatering imellem det der vises/redigeres og de bagved-liggende lister af objekter. Det vil sige at når du fx gerne vil gemme det brugeren har indtastet, skal du blot gemme den liste, du har i koden.

Hvis du bruger DataSet/DataTables kan du udnytte det direkte.

ListView har (højst sandsynligt) en property der hedder DataSource eller ItemsSource - hvis du sætter den til en liste af objekter eller et DataSet forstår man dem som databundne - dvs. at de kolonner du har i ListViewet referer direkte til properties (objekter)/felter (DataSet/DataTable).

Jeg skal gerne give dig noget uddybende - men jeg vil gerne lige have bare en nogenlunde indikation af hvad du gerne vil opnå med ListViewet.

Præsenterer du data eller skal brugeren også kunne redigere?
Hvad ligger bag de data som du anvender? (XML, DataSet/DataTable eller dine egne objekter)
Avatar billede Slettet bruger
14. juli 2008 - 21:34 #9
Hvis du kan skrive lidt uddybende, vil jeg gerne lave dig et eksempel-projekt, hvor jeg viser hvad det kan, hvis det har interesse.
Avatar billede Slettet bruger
14. juli 2008 - 22:02 #10
Nå... jeg er en idiot.

Forvekslede ListView med WPF versionen af ListView og blandende den derefter sammen med DataGridView fra Windows Forms.

Hvis du gerne vil lave databinding - kan det dog lade sig gøre således: http://www.codeproject.com/KB/list/ListView_DataBinding.aspx .
Avatar billede aaberg Nybegynder
15. juli 2008 - 08:30 #11
ListView kontrollen fra Windows Forms har elendig/ingen funktionalitet for databinding og sortering. Det er altid et helvedes arbejde at arbejde med denne kontrol. Det er derfor du finder så mange custom ListViews derude.

Du skriver du ikke ved hvad databinding er, hvilket er helt normalt, da det i princippet ikke er nødvendigt at bruge. Derfor er der mange der ikke sætter sig ind i det. Men tro mig når jeg siger (goblinhero giver mig sikkert ret), at når du begynder at bruge databinding i dine applikationer, vil du kunne udvikle komplicerede, men allikevel stabile, applikationer på kortere tid og med mindre kode, end du bare drømmer om nu.

Og det bliver endnu bedre med WPF. Her kan du sætte hele brugergrænsesnittet op og vise data imellem controls, og lade data i nogle controls være afhængige af andre controls. Du kan styre hele brugergrænsesnittets flow (Brugerens oplevelse af programmet). Alt dette uden at skrive en eneste linje C# kode, og uden at lytte på et eneste event. Så næste gang du har et par dage du ikke ved hvad du skal bruge til, lær dig WPF og databinding i WPF.

:-) :-) :-) :-) :-)

Men men... At komme tilbage til spørgsmålet... Det du egentlig spørger om er en ListView som kan sortere kolonnerne, og som viser pile som fortæller hvilken retning der bliver sorteret. Jeg kender ikke den ListView kontrol som goblinhero foreslår, men den jeg refererer til længere oppe i koden har alt denne funktionalitet, og du skal ikke gøre noget for at få det til at virke. Bare sig til, hvis du vil have et kodeeksempel.
Avatar billede Slettet bruger
15. juli 2008 - 11:31 #12
Okay. Faktisk er min situation ikke ligefrem indbydende til at lære noget nyt - I morgen kommer fire nørder til LAN, og så kan jeg ikke komme til at kikke videre på C# før nogle dage efter. Anyway. Tak for svarene. Er det i orden, hvis jeg kikker på det senere?

Forresten: Jeg skal bruge min ListView til et lille projekt, jeg er ved at lave (delvist for sjov/øvelsens skyld) - Project Manager. Bare et enkelt program, der via en XML-fil viser en liste over igangværende og afsluttede projekter (fordi jeg altid har gang i 1/0 ting på en gang). ListView-Items skabes direkte ud fra XML'en, og ændringer gemmes ligeledes direkte.
Avatar billede Slettet bruger
15. juli 2008 - 19:38 #13
Selvfølgelig. (og som en detalje - helt enig med aaberg; jeg er ikke sikker på at jeg kan programmere i Windows Forms mere :) - og i WPF er databinding simpelthen et must at lære - der er en glimrende indgang til det her: http://msdn.microsoft.com/en-us/library/ms752347.aspx)
Avatar billede Slettet bruger
16. juli 2008 - 12:34 #14
Mange tak :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester