listview sortieren

  • Allgemein

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von TTX.exe.

    listview sortieren

    Hi zusammen,

    ich habe ein Problem mit einer ListView, ich versuche sie zu sortieren und habe den Code aus dem Forum genutzt.

    Versucht habe ich das nun so:

    VB.NET-Quellcode

    1. cmpFileListViewComparer.SortOrder = SortOrder.Ascending
    2. cmpFileListViewComparer.SortColumn = lv_data.column(1)
    3. lv_data.Sort()


    Allerdings erhalte ich nun eine Folgende Fehlermeldung:

    Quellcode

    1. 'column' is not a member of 'System.Windows.Forms.ListView'. (BC30456)


    Schlau werde ich allerdings aus dieser nicht? Was kann man da machen?
    : NV Updater | Nvidia Driver Update Tool
    Hey,

    was man da machen kann? Ein DataGridView, gebunden an eine DataTable nehmen und die Sortierfunktion frei Haus bekommen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    OT:

    shaebich schrieb:

    Da ich davon ausgehe, das die Antwort von SpaceyX, so wie jede Antwort von ihm nicht hilfreich war.

    @shaebich: Du solltest darauf achten was du hier von dir gibst... @SpaceyX: ist länger als du dabei, hat viel mehr Beiträge als du und vorallem gibt er öfter hilfreiche Posts als du!!!

    Zum Problem (also BTT):
    Ich rate dir zu der Lösung von @SpaceyX:
    Ich Antworte nach bestem Wissen und Gewissen. Ich übernehme keine Garantie für die Richtigkeit oder Fehlerfreiheit meiner Texte.


    Ich konnte dir helfen?
    - Das ist schön :) Ich würde mich über ein "Hilfreich" freuen ^^
    @TTX.exe:: Das Zauberwort heißt ListViewSorter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die Idee mit dem DataGridView ist gar nicht mal so schlecht, da ich das Listview eh schon von einem DataSet aus befülle. Allerdings habe ich 0 Plan wie man ein DataGridView benutzt, oder gar Daten darin manipuliert usw. :)

    Aber ich schau mir das mal an, danke für die Idee.
    : NV Updater | Nvidia Driver Update Tool
    Ich habe das mal probiert, eigentlich recht komfortabel, da ich das GridView einfach nur mit Fill auffüllen kann. Was mir aber nun unklar ist, wenn ich Spalten vordefiniere, damit die anständige Namen usw. haben, schreibt er die ganzen Werte einfach hinten dran und erstellt dann wieder neue Spalten. Kann ich ihn irgendwie in die Spalten zwingen?
    : NV Updater | Nvidia Driver Update Tool

    TTX.exe schrieb:

    in die Spalten zwingen?
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hey,

    Spalten definierst Du nicht im DataGridView selber, sondern in der DataTable. So, wie es mir scheint, ist das, was Du machst nur die halbe Miete. Ich hab Dir ein kleines Video erstellt, was auch zeigt, wie Du die Spaltenfolge definierst. Sollte ich Dich falsch verstanden haben, dann meld Dich.

    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hui da haste dir nun richtig Mühe gemacht, erst mal Danke dafür :)

    Das Problem allerdings, ich arbeite mit SharpDevelop, da gibt es keinen DataSet-Designer. Das nächste Problem ist, ich verwende das völlig dynamisch, ich habe eine Funktion, in diese werfe ich eine Query rein und bekomme ein befülltes DataSet zurück. Im Endeffekt kann ich die Header natürlich auch im Query benennen, nur hätte ich gerne für manche eine fixe Größe festgelegt, daran scheitere ich dann im Endeffekt momentan, da er die Spalten halt nur so aufteilt, das die View auf das ganze Form passt.
    : NV Updater | Nvidia Driver Update Tool
    Hey,

    ja, ich kenne das von SharpDevelop. Spricht denn irgendwas gegen VisualStudio? Schau Dir mal im Desinger an, wie die IDE das macht:

    VB.NET-Quellcode

    1. Me.TestString2DataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
    2. Me.TestString1DataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
    3. Me.TestBool1DataGridViewCheckBoxColumn = New System.Windows.Forms.DataGridViewCheckBoxColumn()
    4. Me.TestDate1DataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.TestString2DataGridViewTextBoxColumn, Me.TestString1DataGridViewTextBoxColumn, Me.TestBool1DataGridViewCheckBoxColumn, Me.TestDate1DataGridViewTextBoxColumn})


    Resultierend daraus kannst Du jede Spalte direkt im Code ansrpechen.

    VB.NET-Quellcode

    1. TestString1DataGridViewTextBoxColumn.Width = 10


    Bekommst Du nun Dein DataSet aus der Abfrage zurück, so lege entsprechend die Spalten an.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Das verstehe ich jetzt nicht. Im Prinzip ist es ja so, das dass DataSet gar nicht weiß was aus der DB kommt. Das wird einfach aus der Query gefüllt und hat die Tabellen sie aus der Abfrage kommen...also z.B. so:

    SQL-Abfrage

    1. select id, name from entries where id='2'


    Dann habe ich in der DataGrid automatisch einen Eintrag

    Quellcode

    1. ID | name
    2. ===|======
    3. 02 | admin


    Ich müsste also irgendwie nachträglich an diese zwei Properties (id | admin) ran kommen. Das Datagridview weiß ja bis zur Befüllung nichts von diesen Headern. Vielleicht reden wir da auch gerade aneinander vorbei :)
    : NV Updater | Nvidia Driver Update Tool

    TTX.exe schrieb:

    Ich müsste also irgendwie nachträglich an diese zwei Properties (id | admin) ran kommen. Das Datagridview weiß ja bis zur Befüllung nichts von diesen Headern.
    ja - das ist wohl der Unterschied zw. VS und SharpDevelop.
    Im VisualStudio weiß der FormDesigner, welche Spalten im DGV erscheinen werden
    Vielleicht reden wir da auch gerade aneinander vorbei
    Möglich.
    Möglich kennen wir die Einschränkungen von SharpDevelop nicht, und du kannst dir die Möglichkeiten von VS nicht vorstellen.
    Wenn du die Filme genau guckst, siehst du, dass bereits im FormDesigner Spalten angezeigt werden, und auch schon dem designen zugänglich gemacht sind.
    Das DGV-Verhalten, was du beschreibst, besteht bei DGV.AutoGenerateColumns.True, und damit gibt man natürlich alle Gestaltungsmöglichkeiten im Designer aus der Hand.
    Siehst du, genau das hat mir geholfen (dg.AutoGenerateColumns = false), schon kann ich Columns designen und als DataProbertyName gebe ich ein den Column-Namen aus dem DataSet an und das Teil wird gefüllt und ich kann die Columnen verbasteln wie ich das will :)

    Danke an alle Mitwirkende für die Gemeinschaftslösung.
    : NV Updater | Nvidia Driver Update Tool