Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DBGrid Selected Rows: Abgewählte Zeile bleibt markiert? (https://www.delphipraxis.net/68093-dbgrid-selected-rows-abgewaehlte-zeile-bleibt-markiert.html)

Loki77 24. Apr 2006 15:59


DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Hallo!
Hab gerade festgestellt dass
wenn man eine Zeile im DBGrid selektiert (MultiSelect) und diese dann anklickt um sie zu deselektieren
dann bleibt sie (die Zeile) markiert bis zum ernauten klicken auf eine andere (Zeile).
(Was für ein Satz...)
Wie kann man das beheben? Ist die Selektion wirklich aufgehoben und es liegt nur
noch an der Anzeige oder bleibt die Zeile gewählt?
Hat jemand damit schon Erfahrungen gemacht? Kann man das lösen?
Vielen Dank, Philipp

s-off 24. Apr 2006 16:17

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Hallo,

habe das Gleiche festgestellt.

Mit
Delphi-Quellcode:
ShowMessage(IntToStr(grdData.SelectedRows.Count));
siehst Du aber, dass die Zeile wirklich abgewählt worden ist.

Edit: passiert übrigens nur im Read-Only-Modus.

Loki77 24. Apr 2006 16:29

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Zitat:

passiert übrigens nur im Read-Only-Modus.
Hab ReadOnly auf false und es passiert trozdem....
Hab jetzt so ziemlich jede Einstellung im OI durch, ohne erfolg....
HILFE!!!
Danke trozdem,

Philipp

marabu 24. Apr 2006 16:34

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Hallo Philipp,

SelectedRows verlangt nach bestimmten Options (RowSelect, MultiSelect) und dann ist nicht mehr die Einfärbung der Zeile relevant, sondern das angezeigte Icon für den Satzzeiger.

Grüße vom marabu

Loki77 24. Apr 2006 16:38

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Ich hoffe ich meine das richtige mit Satzzeiger,
der Zeigt mir nämlich den Pfeil (ähnlich wie "Play") nach abwahl der Zeile,
was meiner Meinung nach bedeutet dass diese Zeile die "CurrentSelectedRow" ist.
Und das ist falsch, den eigentlich sollte diese Zeile NICHT selektiert sein...
Ich kann dem Anwender ja schlecht sagen er soll nach dem Abwählen erst mal wo anders im
Grid hinklicken, oder?
Muss doch auch anders gehen....

Philipp

s-off 24. Apr 2006 16:38

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Ahh, sorry - mein Fehler.

Hatte das Ganze in einer bestehenden Applikation getestet in der beim Umschalten des Modus auf ReadOnly := False die Eigenschaft RowSelect nicht gesetzt wurde.

Fazit: Tritt auch bei ReadOnly auf und liegt wohl an der RowSelect-Eigenschaft. Wenn ich diese auf False setze, und MultiSelect gesetzt ist, wird ja trotzdem noch die ganze Zeile ausgewählt.

Loki77 24. Apr 2006 16:49

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Brauche ja auch MultiSelect, RowSelect muss auch auf true sein....
Was kann man da machen?

s-off 24. Apr 2006 16:54

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Habe eben versucht im OnMouseDown-Ereignis des Grids manuell
Delphi-Quellcode:
CurrentRowSelected := not CurrentRowSelected
aufzurufen, aber sobald das Grid mit Daten gefüllt ist, greift das OnMouseDown-Ereignis nicht mehr?!?

Loki77 24. Apr 2006 16:56

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Würde auch nichts bringen, da ich ja erstmal ne Procedure bräuchte die
auf sowas wie "SelectedRow.Click" anspricht....
Über die Bookmark-list gehts nicht....
Ich glaub ich nehm ne andere Kompo....

Philipp

s-off 24. Apr 2006 16:58

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Naja, würde sagen wir mal 'halb' gehen, wenn Du auch noch die Maustaste (mbLeft) und den ShiftState (ssCtrl) abgreifst im OnMouseDown Ereignis.
Aber anscheinend tritt das Ereignis nicht ein, wenn man auf eine Zelle innerhalb des Grids klickt. Ausserhalb funktionierts...

Loki77 25. Apr 2006 08:09

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Morgen!
Kann mir vielleicht jemand ´ne gute alternative zum DBGrid empfehlen in der
dieses Problem nicht auftritt?
Ne´Lösung mit DBGrid wäre natürlich noch besser, aber wenn´s nicht anders geht...

Gruss Philipp

marabu 25. Apr 2006 08:49

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Hallo Philipp,

wo ist dein Problem? Du überträgst deine Erfahrung (Pfeil = current selected row) auf ein DBGrid mit MultiSelect und das ist nicht korrekt. Hier ist ein Pfeil (es gibt zwei Darstellungen des Pfeils) nur der Zeiger für die current row - ein Punkt markiert eine selektierte Row. Wenn du ein DBGrid nur in der MainForm verwendest und die Option MultiSelect während der Laufzeit nicht verstellst, dann gibt es auch keine Irritation auf Seiten des Benutzers.

Freundliche Grüße vom marabu

Loki77 25. Apr 2006 09:08

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Zitat:

wo ist dein Problem?
Das Problem ist dass der Anwender eine Zeile mit "Highlight" als selektiert ansieht, ob
sie es jetzt ist oder nicht.
Da ich ausserhalbe der IDE auf den Indikator verzichte ist es für den Anwender auch nicht
ersichtlich.

Zitat:

Wenn du ein DBGrid nur in der MainForm verwendest und die Option MultiSelect während der Laufzeit nicht verstellst, dann gibt es auch keine Irritation auf Seiten des Benutzers.
Doch. Denn Falls die zuletzt selektierte Zeile auch die letzte ist die der Anwender
anklickt, dann bleibt das "Highlight" erhalten, auch wenn er/sie ein zweites mal darauf klickt
um sie abzuwählen. In diesem Moment ist nicht mehr ersichtlich ob die Zeile nun gewählt ist oder nicht.

Sollte der Anwender eine andere oder weitere Zeile anwählen, so wird dieses "Highlight" aufgehoben.
Falls nicht: -> mein Problem...

marabu 26. Apr 2006 13:22

Re: DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Das mit dem abgeschalteten Indicator ist jetzt aber neu - oder habe ich so ungenau gelesen?

Eines könntest du noch versuchen: Setze DBGrid.DefaultDrawing auf FALSE und wähle eine eigene Farbe für die selektierten Datensätze im Gitter:

Delphi-Quellcode:
procedure TDemoForm.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  Index: Integer;
begin
  with Sender as TDBGrid do
  begin
    if SelectedRows.Find(Column.Field.DataSet.Bookmark, Index) then
    begin
      Canvas.Brush.Color := clBlue;
      Canvas.FillRect(Rect);
    end;
    DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;
Grüße vom marabu

Loki77 26. Apr 2006 14:52

[Erl]DBGrid Selected Rows: Abgewählte Zeile bleibt markiert?
 
Vielen Dank!
Ist eine gute Idee! Hab´sogar kürzlich erst ´n Thread dazu gelesen, kam
aber nicht drauf es für mein Problem zu nutzen...

Gruss Philipp


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz