Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - DBGrid: Warum sind markierte Zeilen nicht gleich selektiert?
RainerT - Di 05.08.03 16:17
Titel: DBGrid: Warum sind markierte Zeilen nicht gleich selektiert?
Hallo zusammen,
ich habe ein DBGrid in dem ich den Inhalt einer Datenbank anzeige (klar, was sonst?). Jetzt möchte ich gerne einen Eintrag markieren und diesen per Button-Klick in eine String-List schreiben.
Im großen und ganzen keine tolle Tat, wenn ein Record selektiert ist, dann kann ich ja mit "SelectedRows" usw. den Datensatz finden.
aaaber... markiert ist ja noch lange nicht selektiert. Z.B. wenn das Grid den Fokus bekommt ist die erste Zeile markiert - "SelectedRows.Count" ist aber null. Genauso wenn ich die Markierung mit den Pfeiltasten rauf und runter schiebe, dann ist der satz auch erstmal nur markiert, nicht selektiert.
Aber dem Anwender dürfte ich den Unterschied nur schwer erklären können, zumal man es ja nichtmal sieht, wenn der Indikator nicht davor ist...
Hat dieses Problem schon mal jemand gelöst? Und wenn dann wie? Kann ich irgendwie rauskriegen, welche Zeile im Grid markiert ist und diese dann programmseitig auf Selected setzen?
BTW, das Grid ist nicht editierbar und RowSelect und MultiSelect stehen auf true.
Danke für Eure Antworten.
Stoffel1984 - Mo 17.05.04 10:03
das würde mich auch mal interessieren - hat jemand ne idee?
gruß, stoffel
mexx2k - Mo 08.10.07 10:08
Leider hat anscheinend noch keiner eine Lösung gefunden...
Ich habe auch ein DB Grid und möchte auslesen, welche Zeilen markiert sind.
Leider blieb ich bisher auf der langen Suche nach einer Lösung erfolgslos.
jasocul - Mo 08.10.07 11:03
Ich halte dieses Verhalten eines DBGrid für sinnvoll. Nur weil es mal den Focus erhält, kann doch deswegen der Datensatz nicht gleich als markiert gelten. Desgleichen gilt, wenn der Anwender durch das Grid blättert. Insbesondere bei MultiSelect.
Meine Idee:
Da ich im Moment nicht weiß, ob ein DBGrid ein entsprechendes Event hat, kann man auch über das OnChange der DataSource (oder war es das DateSet? :gruebel: ) gehen. In dem Fall setzt man den Markiert-Status manuell.
mexx2k - Mo 08.10.07 14:19
Nur was machste bei Multiselect?
raiguen - Mo 08.10.07 18:01
Moin :-)
Ich habe dieses Problem - ebend zum besseren Benutzerverständnis - wie folgt gelöst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var bmIndex: integer; begin if DBGrid1.SelectedRows.Find(Column.Field.DataSet.Bookmark, bmIndex) then begin DBGrid1.Canvas.Brush.Color:= clTeal; DBGrid1.Canvas.FillRect(Rect); end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; |
Alle
selektierten Zeilen im DBGrid werden mit einer 'besonderen' Farbe gemalt, während die
markierte Zeile weiterhin mit der Systemfarbe gepinselt wird und die restlichen Zeilen halt mit der 'Grundfarbe' des DB Grids.
WICHTIG: DBGrid1.DefaultDrawing
MUSS auf true gesetzt sein :!:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!