Autor Beitrag
RainerT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Di 05.08.03 16:17 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Mo 17.05.04 10:03 
das würde mich auch mal interessieren - hat jemand ne idee?

gruß, stoffel
mexx2k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 60



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Mo 08.10.07 14:19 
Nur was machste bei Multiselect?
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Mo 08.10.07 18:01 
Moin :-)
Ich habe dieses Problem - ebend zum besseren Benutzerverständnis - wie folgt gelöst:
ausblenden 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 :!: