AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid und MultiSelect

Ein Thema von Rolf.Blessing · begonnen am 16. Mai 2007 · letzter Beitrag vom 16. Mai 2007
Antwort Antwort
Rolf.Blessing

Registriert seit: 8. Sep 2006
16 Beiträge
 
#1

DBGrid und MultiSelect

  Alt 16. Mai 2007, 11:05
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 ?
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#2

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 11:42
Ansatz genug?

Delphi-Quellcode:
procedure TForm.DBGridKeyPress(Sender: TObject; var Key: Char);
begin
   if key= chr(13) then DbGrid.SelectedRows.CurrentRowSelected := True;
end;
Uwe
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 11:48
Hi,

probier ess mal so:

Delphi-Quellcode:
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;
Edit: @Uwe - Der Ansatz ist schon ok, nur die Problematik sind wohl die Cursortasten ;o)
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#4

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 11:54
Zitat von s-off:
Edit: @Uwe - Der Ansatz ist schon ok, nur die Problematik sind wohl die Cursortasten ;o)
Wieso? Diese werden doch völlig ignoriert und tun ihre gewohnte Arbeit.
if key= chr(13) bedeutet nur bei <ENTER>
Uwe
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#5

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 11:58
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.
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#6

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 12:10
@s-off

DBGrid1.SelectedRows.CurrentRowSelected Nimmt trotzdem den Datensatz in die Bookmarkliste auf.

Mit DBGrid1.DataSource.DataSet.MoveBy(1); machst Du auch nur den nächsten Datensatz zum aktiven, sowie die Cursor Tasten.
Uwe
  Mit Zitat antworten Zitat
Rolf.Blessing

Registriert seit: 8. Sep 2006
16 Beiträge
 
#7

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 12:28
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 !!!
  Mit Zitat antworten Zitat
Rolf.Blessing

Registriert seit: 8. Sep 2006
16 Beiträge
 
#8

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 12:39
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;
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#9

Re: DBGrid und MultiSelect

  Alt 16. Mai 2007, 13:25
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 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