Listview Items dynamisch erzeugen



  • Dein Code wäre ja "nur" für eine Spalte,sprich 1 Datensatz.
    Wie könnte ich dies aber für X Datensätze realisieren.Hierzu benötige ich ja je Datensatz 1 item Object.

    Du meinst nur für eine Zeile ?

    Für mehrere einfach eine Schleife. Das mit den SubItems ist dafür da, dass du einen Datensatz auf mehrere Spalten verteilen kannst wenn du willst. Das ListViewItem enthält den Text in Spalte 1, das erste SubItem den Text für Spalte 2 usw.

    Das mit dem "Namen setzen" verstehe ich immer noch nicht. ListViewItems haben ansich keinen "Namen", nur einen Text. Und den kannst du ja dynamisch generieren, wenn du sie durchgezählt haben willst hängst du an den Text halt vorne noch die entsprechende Nummer dran.



  • DarkShadow44 schrieb:

    Dein Code wäre ja "nur" für eine Spalte,sprich 1 Datensatz.
    Wie könnte ich dies aber für X Datensätze realisieren.Hierzu benötige ich ja je Datensatz 1 item Object.

    Du meinst nur für eine Zeile ?

    Für mehrere einfach eine Schleife. Das mit den SubItems ist dafür da, dass du einen Datensatz auf mehrere Spalten verteilen kannst wenn du willst. Das ListViewItem enthält den Text in Spalte 1, das erste SubItem den Text für Spalte 2 usw.

    Das mit dem "Namen setzen" verstehe ich immer noch nicht. ListViewItems haben ansich keinen "Namen", nur einen Text. Und den kannst du ja dynamisch generieren, wenn du sie durchgezählt haben willst hängst du an den Text halt vorne noch die entsprechende Nummer dran.

    Hallo,

    dass mit den SubItems habe ich dank eurer Hilfe nun auch denke mal komplett Verstanden.

    Das Objekt selber hat doch einen "Namen",den du auch beim erzeugen des Objekts mit angeben musst bsp. listviewitem1.Dieses wird ja später auch zum verwenden des Objekts benötigt.Soweit korrekt?

    Von der Theorie her,hätte ich auch gesagt "machste einfach ne for-Schleife drum rum und lässt nen int-Wert hochzählen,der dann einfach hintendran gehängt wird".
    Puste kuchen - Bei einer Objekt erzeugung gefällt dies VS leider nicht,auch wenn man diesen zuvor in einen String speichert(sonst wäre es ja auch so einfach^^).

    EDIT:

    array<String ^> ^sql = Kernel->SQLMultipleRead("SELECT username FROM zd_user")->Split(','); 
    for (int i = 0; i < sql->Length; i++)
    {
           System::Windows::Forms::ListViewItem^  listViewItem + sql[i] = gcnew System::Windows::Forms::ListViewItem("SAMPLE");
    }
    

    Speziell "listViewItem + sql[i]" diesen Teil mit der Kombinierung ist das Problem.Hier erwartet er ein Semicolon.(Der Code oben ist nur ein Beispiel und der Komplette Inhalt der Form Load Methode)



  • Hallo,

    du musst nicht für jedes hinzuzufügende ListViewItem-Objekt einen neuen Namen erzeugen, es reicht so:

    Vor der Schleife listViewItem definieren:

    System::Windows::Forms::ListViewItem^  listViewItem;
    

    in der Schleife nutzt du dann die aktuellen Daten für das listViewItem :

    // in einer Schleife:
    listViewItem = gcnew System::Windows::Forms::ListViewItem("Daten für die erste Spalte (Name ?!)");
    listViewItem->SubItems->Add("Daten für die zweite Spalte");
    listViewItem->SubItems->Add("Daten für die dritte Spalte");
    listView1->Items->Add(listViewItem); // in den ListView einfügen
    

    MfG,

    Probe-Nutzer



  • Probe-Nutzer schrieb:

    Hallo,

    du musst nicht für jedes hinzuzufügende ListViewItem-Objekt einen neuen Namen erzeugen, es reicht so:

    Vor der Schleife listViewItem definieren:

    System::Windows::Forms::ListViewItem^  listViewItem;
    

    in der Schleife nutzt du dann die aktuellen Daten für das listViewItem :

    // in einer Schleife:
    listViewItem = gcnew System::Windows::Forms::ListViewItem("Daten für die erste Spalte (Name ?!)");
    listViewItem->SubItems->Add("Daten für die zweite Spalte");
    listViewItem->SubItems->Add("Daten für die dritte Spalte");
    listView1->Items->Add(listViewItem); // in den ListView einfügen
    

    MfG,

    Probe-Nutzer

    Hallo Probe-Nutzer,

    wenn ich das listview Steuerelemtn richtig verstanden habe,dann muss ich doch pro "zeile" ein listviewitem object erzeugen,oder ?

    nachaktuellem Stand wäre dein Code ja eine Zeile mit 3 Spalten,richtig ?



  • Kann es sein dass du die Grundlagen noch nicht so ganz beherrscht ?

    du musst zwischen dem Namen eines Objekts und dem namen einer Variable unterscheiden. Die Objekte selber haben keinen Namen, es ist hier nicht so wie im Designer dass jedes ListViewIem einen Namen hat falls du das meinst.

    wenn ich das listview Steuerelemtn richtig verstanden habe,dann muss ich doch pro "zeile" ein listviewitem object erzeugen,oder ?

    nachaktuellem Stand wäre dein Code ja eine Zeile mit 3 Spalten,richtig ?

    genau.

    Mit

    System::Windows::Forms::ListViewItem^  listViewItem + sql[i] = gcnew System::Windows::Forms::ListViewItem("SAMPLE");
    

    funktioniert das auch nicht. Versuchs mal mit

    System::Windows::Forms::ListViewItem^  listViewItem = gcnew System::Windows::Forms::ListViewItem("SAMPLE" + sql[i]);
    


  • DarkShadow44 schrieb:

    Kann es sein dass du die Grundlagen noch nicht so ganz beherrscht ?

    du musst zwischen dem Namen eines Objekts und dem namen einer Variable unterscheiden. Die Objekte selber haben keinen Namen, es ist hier nicht so wie im Designer dass jedes ListViewIem einen Namen hat falls du das meinst.

    wenn ich das listview Steuerelemtn richtig verstanden habe,dann muss ich doch pro "zeile" ein listviewitem object erzeugen,oder ?

    nachaktuellem Stand wäre dein Code ja eine Zeile mit 3 Spalten,richtig ?

    genau.

    Mit

    System::Windows::Forms::ListViewItem^  listViewItem + sql[i] = gcnew System::Windows::Forms::ListViewItem("SAMPLE");
    

    funktioniert das auch nicht. Versuchs mal mit

    System::Windows::Forms::ListViewItem^  listViewItem = gcnew System::Windows::Forms::ListViewItem("SAMPLE" + sql[i]);
    

    Guten Abend,

    mit dem "Namen" ansich ist es mir schon klar,ich habe in der Regel nur ein Problem mich verstandlich für andere in Schriftform auszudrücken..(wie ihr sicherlich schon mitbekommen habt).

    Würde dein geposteter Vorschlag nicht die Erste Spalte mit "SAMPLE + sql[i]" füllen ? Bin momentan leider nicht in Reichweite meiner IDE.



  • Würde dein geposteter Vorschlag nicht die Erste Spalte mit "SAMPLE + sql[i]" füllen ?

    Nein. Er würde den String "SAMPLE" mit dem i-ten String aus dem Array verknüpfen, der resultierende String wird dann in die erste Spalte gepackt.



  • DarkShadow44 schrieb:

    Würde dein geposteter Vorschlag nicht die Erste Spalte mit "SAMPLE + sql[i]" füllen ?

    Nein. Er würde den String "SAMPLE" mit dem i-ten String aus dem Array verknüpfen, der resultierende String wird dann in die erste Spalte gepackt.

    ehm ja,das meinte ich.
    Wie die Spalten gefüllt werden ist mir soweit ja auch klar.
    Nur wie bekomme ich bei zb. 2 Datensätzen aus der DB (was 2 Zeilen in der Listview entspricht) in die Listview ?

    Nur darum geht es mir ansich.....
    Sorry,wenn ich mich so undeuntlich ausdrücke.



  • Also dazu muss ich sagen dass ich keine Ahnung habe wie "SQLMultipleRead" die Daten zurück gibt. Ansich einfach so (Vorausgesetzt jeder String in "sql" ist eine Zeile):

    for(int i=0;i<sql->Length;i++)
    {
        System::Windows::Forms::ListViewItem^  listViewItem1 = gcnew System::Windows::Forms::ListViewItem("ID: " + i); // ID in erster Spalte
        listViewItem1->SubItems->Add(sql[i]); // Datensatz in zweiter Spalte
        listView1->Items->Add(listViewItem1); // in den ListView einfügen
    }
    

    Wenn in diesem Fall die Zeile auf mehrere Spalten aufgeteilt werden soll musst du sie halt noch splitten.



  • Hallo ^bnL,

    bei deinen mangelnden Grundkenntnissen, beachte unbedingt Windows Forms und Visual C++ MACHT KEINEN SINN!.
    Am besten, du beschäftigst dich ersteinmal mit den Grundkenntnissen einer Sprache (C++ oder C#) für Konsolenprogramme (bevor du GUI und Datenbanken verwendest)!


Anmelden zum Antworten