FRAGE: FindData
-
Hallo Leute,
ich bin noch ein neuling, habe mit dem BCB C++ v6 neu angefangen.
Also in meinen ersten Projekt soll ich so etwas ähnliches wie eine
User verwaltung erstellen.
Ich kann mit meinem Programm folgendes machen:User anlegen
User bearbeiten
User löschen
User aus SmartOpen auslesen (SmartOpen ist ein Schließsystem der mit Transpondern funktioniert)Meine frage ist, wenn ich die Daten von SmartOpen über RS232 lese und in meinem ListView ausgebe, werden die Datensätze immer neu angelegt. Ist ja nicht falsch, aber die Datensätze die schon existieren sollen nicht angelegt werden nur die neuen , die noch nicht in der Liste sind.
Wie könnte ich das erfolgreich in die Tat umsetzen?
Könnte mir jemand nen Beispiel geben, wie das mit FindData o.ä. funktionieren könnte?mfg
guenter67
-
Hallo
Um TLiStView::FindData benutzen zu können must du den einzelnen Items beim Eintragen erstmal eine solche Dateninformation zuweisen. Und zwar in der Eigenschaft TListItem::Data. Dieser Eigenschaft kannst du zuweisen was du willst, in deinem Fall sollte es eine eindeutige ID des Datensatzes sein.
Wenn diese ID vom Wertebreich her in ein (unsigned) int passt must du nur bei jedem neuen ListItem so die ID hinzufügen:TListItem* NewItem = // ... Neues Item int ID = // eindeutige ID des Datensatzes NewItem->Data = reinterpret_cast<void*>(ID);Dann kannst du FindData so einsetzen :
int ID = // ID die zu finden ist TListItem* Item = ListView->FindData(0, reinterpret_cast<void*>(ID), true, false); if (Item) { // gefunden } else { // nicht gefunden }Wenn die ID nicht in einen int passt bleibt dir nichts weiter übrig als die IDs in dynamischen Arrays abzulegen und als ID für die ListItems entweder die Indexe aus dem Array oder die Speicheradressen der Arrayelemente zu verwenden.
bis bald
akari