![]() |
DBGrid und MultiSelect
Ich möchte gerne in einem DBGrid mehrere Zeilen markieren - also multiselect - und dabei aber auschliesslich die Tastatur benutzen. Kein SHIFT-Pfeil oder STRG-Maus !
Mein Wunsch wäre: Mit den Pfeiltasten durch ein DBGrid zu wandern und mittels RETURN die gewünschten Zeilen auswählen. Habt ihr eine Idee oder einen Ansatz ? |
Re: DBGrid und MultiSelect
Ansatz genug?
Delphi-Quellcode:
procedure TForm.DBGridKeyPress(Sender: TObject; var Key: Char);
begin if key= chr(13) then DbGrid.SelectedRows.CurrentRowSelected := True; end; |
Re: DBGrid und MultiSelect
Hi,
probier ess mal so:
Delphi-Quellcode:
Edit: @Uwe - Der Ansatz ist schon ok, nur die Problematik sind wohl die Cursortasten ;o)
Procedure TForm1.DBGrid1KeyDown(Sender: TObject; Var Key: Word; Shift: TShiftState);
Begin If Key = VK_RETURN Then DBGrid1.SelectedRows.CurrentRowSelected := True Else If Key = VK_DOWN Then Begin DBGrid1.DataSource.DataSet.MoveBy(1); Key := 0; End Else If Key = VK_UP Then Begin DBGrid1.DataSource.DataSet.MoveBy(-1); Key := 0; End; End; |
Re: DBGrid und MultiSelect
Zitat:
Delphi-Quellcode:
bedeutet nur bei <ENTER>
if key= chr(13)
|
Re: DBGrid und MultiSelect
Ja, genau - sie tun Ihre gewohnte Arbeit.
Und die besteht darin, dass DataSet.NextRow aufgerufen wird, was die vorher gesetzte Markierung wieder entfernt. Dieses muss halt unterbunden und statt dessen mit einer anderen Funktion belegt werden, beispielsweise der, die im MouseWheelUp/Down Event stattfindet, nämlich MoveBy. |
Re: DBGrid und MultiSelect
@s-off
Delphi-Quellcode:
Nimmt trotzdem den Datensatz in die Bookmarkliste auf.
DBGrid1.SelectedRows.CurrentRowSelected
Mit
Delphi-Quellcode:
machst Du auch nur den nächsten Datensatz zum aktiven, sowie die Cursor Tasten.
DBGrid1.DataSource.DataSet.MoveBy(1);
|
Re: DBGrid und MultiSelect
Hallo s-off,
herzlichen Dank für die perfekte Lösung ! Das Entscheidende war das Abschalten der Pfeiltasten (MoveBy). Endlich Grids ohne die Maus verwenden zu müssen. Danke !!! |
Re: DBGrid und MultiSelect
Ich habe abschliessend noch den Fall der Rückmahme einer Markierung aufgenommen:
Delphi-Quellcode:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if ( Key = VK_RETURN ) then if ( DBGrid1.SelectedRows.CurrentRowSelected = False ) then DBGrid1.SelectedRows.CurrentRowSelected := True else DBGrid1.SelectedRows.CurrentRowSelected := False else if ( Key = VK_DOWN ) then begin DBGrid1.DataSource.DataSet.MoveBy(1); Key := 0; end else if ( Key = VK_UP ) then begin DBGrid1.DataSource.DataSet.MoveBy(-1); Key := 0; end; end; |
Re: DBGrid und MultiSelect
Uwe,
ich glaube, wir reden aneinandeer vorbei. Es steht ausser Frage, dass CurrentRowSelected := True die aktuelle Zeile in die Bookmarkliste aufnimmt. Wenn Du anschliessend aber mit den Cursortasten auf/ab durch das Grid navigierst, gehen die Markierungen wieder verloren; und genau das ist das Problem, welches aber durch das überschreiben dieser Anweisung mit Key := 0 aus der Welt geschafft wird. Wenn Du das, worum es hier geht, einmal ausprobieren würdest, dann wüsstest Du, was ich meine. Und wie Rolf angemerkt hat, ist dieses genau das Ergebnis, das er erzielen wollte. 'CurrentRowSelected' ist ihm, das entnehme ich jedenfalls seiner Aussage, wohl schon selber eingefallen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz