Listenfeld Dialog
Moderator: Moderatoren
-
- **
- Beiträge: 27
- Registriert: So, 05.03.2006 15:12
- Wohnort: Schwoiga
Listenfeld Dialog
Hallo,
ich habe einen Dialog der zwei Listenfelder enthält. Im ersten Listenfeld (lstMitglieder) wird ein zusammengesetzter Datensatz aus ID, Vorname und Name angezeigt.
Ausgewählte Datensätze werden in die zweite Liste (lstAusgewaehlt) verschoben.
Hat jemand eine Idee wie ich aus dem Datensatz wieder die ID isolieren und speichern kann, bzw. ich hab im StarOffice Handbuch folgenden Eintrag zu Listenfeldern gefunden:
___________________________________________________________
Hinweis – Die VBA-Option zum Versehen von Listeneinträgen mit einem numerischen
Zusatzwert (ItemData) ist in StarOffice Basic nicht vorhanden. Soll neben dem
Klartext ein zusätzlicher Zahlenwert (etwa eine Datenbank-Id) mit verwaltet werden,
so muss hierfür ein Hilfsdatenfeld erstellt werden, das parallel zum Listenfeld
verwaltet wird.
____________________________________________________________
Gibt es in OOBasic diese Funktion oder wie muss man sich die Lösung mit dem Hilfsdatenfeld vorstellen?
Währe Dankbar über eine kurze Definition der Methode mit dem Hilfsdatenfeld.
Gruß, Matze
ich habe einen Dialog der zwei Listenfelder enthält. Im ersten Listenfeld (lstMitglieder) wird ein zusammengesetzter Datensatz aus ID, Vorname und Name angezeigt.
Ausgewählte Datensätze werden in die zweite Liste (lstAusgewaehlt) verschoben.
Hat jemand eine Idee wie ich aus dem Datensatz wieder die ID isolieren und speichern kann, bzw. ich hab im StarOffice Handbuch folgenden Eintrag zu Listenfeldern gefunden:
___________________________________________________________
Hinweis – Die VBA-Option zum Versehen von Listeneinträgen mit einem numerischen
Zusatzwert (ItemData) ist in StarOffice Basic nicht vorhanden. Soll neben dem
Klartext ein zusätzlicher Zahlenwert (etwa eine Datenbank-Id) mit verwaltet werden,
so muss hierfür ein Hilfsdatenfeld erstellt werden, das parallel zum Listenfeld
verwaltet wird.
____________________________________________________________
Gibt es in OOBasic diese Funktion oder wie muss man sich die Lösung mit dem Hilfsdatenfeld vorstellen?
Währe Dankbar über eine kurze Definition der Methode mit dem Hilfsdatenfeld.
Gruß, Matze
-
- **
- Beiträge: 27
- Registriert: So, 05.03.2006 15:12
- Wohnort: Schwoiga
Hallo,
ich hab jezt mal ein Makro zusammengebaut, dass die Ausgewählten einträge mit einem Datenarray vergleicht. Im Datenarray sind dann in der Zweiten Dimension die IDs gespeichert.
Ich weiß allerdings nicht ob die Lösung so Optimal ist. Bei 30 Datensätzen muss die Schleife ca. 450 Mal durchlaufen.
Ich währe für verbesserungsvorschläge Dankbar,
Gruß Matze
ich hab jezt mal ein Makro zusammengebaut, dass die Ausgewählten einträge mit einem Datenarray vergleicht. Im Datenarray sind dann in der Zweiten Dimension die IDs gespeichert.
Ich weiß allerdings nicht ob die Lösung so Optimal ist. Bei 30 Datensätzen muss die Schleife ca. 450 Mal durchlaufen.
Code: Alles auswählen
Sub test
Dim auswahl () as string
auswahl () = lstAusgewaehlt.Model.StringItemList
A=0
M=0
Do
If auswahl(A) = arrayMitglied(M,0) then
'msgBox "Ausgewählt ist "+arrayMitglied(M,0)+" mit ID "+arrayMitglied(M,1)
M = 0
A = A+1 else
if M > UBound(arrayMitglied()) then
msgBox "Fehler Name nicht gefunden"
Exit Do
End If
M = M + 1
End If
Loop while A <= UBound(auswahl)
End Sub
Gruß Matze
Hey Matze,
Also, alle Listeneinträge werden neben dem Klartext doch auch als Zahlenarray (Position) gespeichert. Es ist doch eigentlich gar nicht so kompliziert, dem Nummer-Eintrag beim Zusammenbauen des Strings gleichzeitig in einen Array zu speichern, welcher die gleiche Reihenfolge aufweist wie der Listenarray. Dann kannst du später sehr einfach darauf zugreifen - über SelectedItemsPos.
Die andere Möglichkeit wäre natürlich, die Zahl wieder aus dem String zu extrahieren. Das geht in der Regel genauso, wie du ihn zusammengebaut hat. Und beides erscheint mir einfacher als deine Schleife
Gruss
Thomas
Also, alle Listeneinträge werden neben dem Klartext doch auch als Zahlenarray (Position) gespeichert. Es ist doch eigentlich gar nicht so kompliziert, dem Nummer-Eintrag beim Zusammenbauen des Strings gleichzeitig in einen Array zu speichern, welcher die gleiche Reihenfolge aufweist wie der Listenarray. Dann kannst du später sehr einfach darauf zugreifen - über SelectedItemsPos.
Die andere Möglichkeit wäre natürlich, die Zahl wieder aus dem String zu extrahieren. Das geht in der Regel genauso, wie du ihn zusammengebaut hat. Und beides erscheint mir einfacher als deine Schleife

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
-
- **
- Beiträge: 27
- Registriert: So, 05.03.2006 15:12
- Wohnort: Schwoiga
Hallo Thomas,
das Problem ist das die Einträge (teilweise) von einer Liste in die andere Verschoben werden. Dabei ändert sich die Position der Einträge, da diese immer Durchgehend Nummeriert sind und keine feste Postion für einen Eintrag vergeben werden kann. ich müsste also beim Verschieben immer die neue Positionsnummer ins Array schreiben.
Wie funktioniert das mit dem Zerlegen des Strings? Zusammengebaut habe ich ihn mit einem Resultset:
Sring = ID + Vorname + Name
Leider weiß ich bis jetzt nicht wie ich dies wieder Zerlegen kann.
Vielen Dank,
Matze
Edit: Zu Positionen: Ich füge die neuen Einträge der Übersicht halber immer in Position 0 ein. Dadurch verschieben sich auch alle frühen Einträge --> ich müsste auch in allen Arrays der Eingefügten Daten die Pos neu schreiben.
das Problem ist das die Einträge (teilweise) von einer Liste in die andere Verschoben werden. Dabei ändert sich die Position der Einträge, da diese immer Durchgehend Nummeriert sind und keine feste Postion für einen Eintrag vergeben werden kann. ich müsste also beim Verschieben immer die neue Positionsnummer ins Array schreiben.
Wie funktioniert das mit dem Zerlegen des Strings? Zusammengebaut habe ich ihn mit einem Resultset:
Sring = ID + Vorname + Name
Leider weiß ich bis jetzt nicht wie ich dies wieder Zerlegen kann.
Vielen Dank,
Matze
Edit: Zu Positionen: Ich füge die neuen Einträge der Übersicht halber immer in Position 0 ein. Dadurch verschieben sich auch alle frühen Einträge --> ich müsste auch in allen Arrays der Eingefügten Daten die Pos neu schreiben.
Hey Matze,
Falls die 5 stellige Zahl nicht ausreicht, musst du event.uell cInt durch CLng ersetzen.
Falls die ID-Nummer in der Länge nicht definiert ist, bau dir einen "trenner" ein- in den String, z.B. String = ID & "_" & Vorname & Name, dann suchst du nach dem Trener und lieferst den linken Teil
Also:
Gruss
Thomas
Hmm, wie lang ist die ID? Fester Wert? (z.B. 5 Stellen?) Dann so:Wie funktioniert das mit dem Zerlegen des Strings? Zusammengebaut habe ich ihn mit einem Resultset:
Sring = ID + Vorname + Name
Code: Alles auswählen
iId = CInt(links(string, 5))
Falls die ID-Nummer in der Länge nicht definiert ist, bau dir einen "trenner" ein- in den String, z.B. String = ID & "_" & Vorname & Name, dann suchst du nach dem Trener und lieferst den linken Teil

Also:
Code: Alles auswählen
iID = CInt(Links(String, InStr(String, "_")))
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
-
- **
- Beiträge: 27
- Registriert: So, 05.03.2006 15:12
- Wohnort: Schwoiga
Hallo Thomas,
vielen Dank für deine Antwort. Ich wusste gar nicht dass es in Basic so tolle Suchfunktionen gibt, das arbeiten mit ihnen ist natürlich um eineiges Komfortabler. Man lernt halt nie aus.
Ich habe den Code so angepasst das er bei mir funktioniert:
Gruß Matze
vielen Dank für deine Antwort. Ich wusste gar nicht dass es in Basic so tolle Suchfunktionen gibt, das arbeiten mit ihnen ist natürlich um eineiges Komfortabler. Man lernt halt nie aus.

Ich habe den Code so angepasst das er bei mir funktioniert:
Code: Alles auswählen
test = "988_Vorname Name"
iID = CInt(Left(test, InStr(test, "_")))