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....