Listenfeld Dialog

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Bratmatzen
**
Beiträge: 27
Registriert: So, 05.03.2006 15:12
Wohnort: Schwoiga

Listenfeld Dialog

Beitrag von Bratmatzen »

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
Bratmatzen
**
Beiträge: 27
Registriert: So, 05.03.2006 15:12
Wohnort: Schwoiga

Beitrag von Bratmatzen »

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.

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
Ich währe für verbesserungsvorschläge Dankbar,
Gruß Matze
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

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 :wink:

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bratmatzen
**
Beiträge: 27
Registriert: So, 05.03.2006 15:12
Wohnort: Schwoiga

Beitrag von Bratmatzen »

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.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Matze,
Wie funktioniert das mit dem Zerlegen des Strings? Zusammengebaut habe ich ihn mit einem Resultset:
Sring = ID + Vorname + Name
Hmm, wie lang ist die ID? Fester Wert? (z.B. 5 Stellen?) Dann so:

Code: Alles auswählen

iId = CInt(links(string, 5))
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 :wink:
Also:

Code: Alles auswählen

iID = CInt(Links(String, InStr(String, "_")))
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bratmatzen
**
Beiträge: 27
Registriert: So, 05.03.2006 15:12
Wohnort: Schwoiga

Beitrag von Bratmatzen »

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. :lol:
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, "_")))
Gruß Matze
Antworten