ListView / SubItems auslesen



  • Gibt es denn überhaupt ein zweites Subitem?

    [Edit] Wieder mal zu langsam... 😉



  • Hallo

    Benutz den Debugger und kontrolle an jeder einzelnen Stelle die entsprechenden Werte. Insbesondere ist zu überprüfen :
    - Hat der TreeView überhaupt Nodes?
    - Ist ein Node in dem TreeView ausgewählt?
    - Hat der ausgewählte Node wirklich mindestens 2 Subitems?

    Du solltest unbedingt mehr Zustandsüberprüfungen in deinen Code einbauen!

    /Edit : Joe : aber immerhin noch schneller als ich 😉

    bis bald
    akari



  • also die einträge schreibe ich so

    TListItem* Eintrag;
    
        if(Data->Query1->RecordCount==0)
        {
        ListView1->Clear();
        ListView1->Visible=false;
        }
        else
        {
         ListView1->Clear();
         Data->Query1->First();
            for(int i=0;i<Data->Query1->RecordCount;i++)
            {
            Eintrag = ListView1->Items->Add();
            Eintrag->Caption = Data->Query1->FieldByName("Name")->AsString;
            Eintrag->SubItems->Add(Data->Query1->FieldByName("Vorname")->AsString);
            Eintrag->SubItems->Add(Data->Query1->FieldByName("KundenID")->AsString);
            Data->Query1->Next();
            }
    
          ListView1->Visible=true;
        }
    

    Das ist doch richtig oder?
    Und nach meinem Verständniss müssten auch die SubItem vorhanden sein, sie werden ja auch angezeigt.

    Oder bringe ich da etwas ducheinander

    gruss lisa



  • Hallo

    schon möglich, das irgendwo irgendwann in deinem Programm ein Node mit zwei SubItems erstellt wird.
    Aber du sollst an der konkreten Fehlerstelle die genannten Punkte überprüfen.

    bis bald
    akari



  • hallo akari,

    nodes gibt es doch nur bei TreeViews oder?

    Ich habe gerade nochmal in der BCB Hilfe gesucht aber in bezug auf Listview nicht von Nodes gefunden.

    gruss lisa



  • Hallo

    ja, bei dem ListView heißt das Items und nicht Nodes. Mein fehler

    bis bald
    akari



  • und bei mir wird das + nicht angezeigt, wieso?
    habe im OI Items angelegt, auch Untereinträge, aber das + welches im Editor zu sehen ist, ist so auf der Komponente nicht zu sehen, kann auch die Subitems nicht auswählen!

    wieso?



  • Hallo

    Beim TListView gibt es keine + und -. Wenn du die SubItems sehen willst, must du die Eigenschaft ViewStyle auf vsReport setzen, und entsprechende Spalten in der Eigenschaft Columns anlegen.
    Wenn du eine hierarische Struktur willst, must du TTreeView nehmen.

    bis bald
    akari



  • Hallöchen,

    c++ - Arrays (zumindest bei !Allen C++Builder-Objekten)
    beginnen immer bei 0;

    Daher :

    1. Edit1->Text=Item->SubItems->Strings[0]; (1.SubString)
    2. Edit2->Text=Item->SubItems->Strings[1]; (2.SubString)

    wenn's 2. nicht gibr, dann eben die genannte Fehlermeldung.

    aber viel schlimmer ist :

    ListView1->ItemIndex gibt es nicht.

    Daher frag ich mich, wie der Code durch den Compiler läuft.

    [cpp]



  • unbekannt schrieb:

    Hallöchen,

    c++ - Arrays (zumindest bei !Allen C++Builder-Objekten)
    beginnen immer bei 0;

    bei AnsiString nciht, bitte beachten



  • Ok, simples Beispiel...
    Mach Dir eine neue Anwendung, pack ein TListView, ein TMemo und zwei TButtons darauf. In der ListView erstellst ein paar Einträge inkl. Untereinträgen (einfach über die Eigenschaft TListItems der TListView, nimm ruhig eine verschiedene Anzahl SubItems für die Einträge)

    Dann trägst Du in das OnClick()-Ereignis der Buttons folgende Code ein.

    // alle Items ausgeben
    int iCount;
    AnsiString asText;
    Memo1->Lines->Clear();
    
    int iItems = ListView1->Items->Count;
    Memo1->Lines->Add("Anzahl Einträge in der ListView: " + AnsiString(iItems));
    Memo1->Lines->Add("");
    for (int i = 0; i < iItems; ++i)
    {
    	iCount = ListView1->Items->Item[i]->SubItems->Count;
    	Memo1->Lines->Add("Eintrag: " + ListView1->Items->Item[i]->Caption);
    	asText = "Untereinträge (" + AnsiString(iCount) + "):";
    	for (int j = 0; j < iCount; ++j)
    	{
    		asText += " " + ListView1->Items->Item[i]->SubItems->Strings[j];
    		if (j < iCount - 1)
    			asText += ", ";
    	}
    	Memo1->Lines->Add(asText);
    	Memo1->Lines->Add("");
    }
    
    // nur selektierten Eintrag ausgeben
    int iCount;
    AnsiString asText;
    Memo1->Lines->Clear();
    
    Memo1->Lines->Add("Ausgewählter Eintrag in der ListView: " + AnsiString(ListView1->ItemIndex));
    Memo1->Lines->Add("");
    int i = ListView1->ItemIndex;
    if (i >= 0)
    {
    	iCount = ListView1->Items->Item[i]->SubItems->Count;
    	Memo1->Lines->Add("Eintrag: " + ListView1->Items->Item[i]->Caption);
    	asText = "Untereinträge (" + AnsiString(iCount) + "):";
    	for (int j = 0; j < iCount; ++j)
    	{
    		asText += " " + ListView1->Items->Item[i]->SubItems->Strings[j];
    		if (j < iCount - 1)
    			asText += ", ";
    	}
    	Memo1->Lines->Add(asText);
    	Memo1->Lines->Add("");
    }
    else
    	Memo1->Lines->Add("Kein Eintrag ausgewählt");
    

    Schau Dir das mal in Ruhe an, geh mal mit dem Debugger durch....


Anmelden zum Antworten