TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)

Beitrag von MmVisual »

Hallo,

Ich habe eine besondere Anforderung. Ich habe ein DBGrid, das zeigt die Daten und scrollt immer an das Ende wenn ich mit einer Suchen-Eingabe ein Locate mache. Also der richtige Datensatz wird gezeigt, das ist nicht das Problem. Also das Grid zeigt sich auf dem ganzen Bildschirm, und der aktive Datensatz ist der letzte ganz unten.

Das gefällt mir aber nicht, kann ich irgendwie dem Grid bei bringen dass bei einer Suche dann der aktive Datensatz in der Mitte des sichtbaren Bildschirmbereiches ist?
Also z.B. sind 20 Datensätze auf dem Bildschirm sichtbar (Tabelle hat z.B. insgesamt 100). Jetzt mache ich ein Locate auf Datensatz Nr. 40, dann hätte ich gerne dass das TDBGrid mit die Datensätze 30..50 anzeigt und der aktive Datensatz auf 40 zeigt.

Vieleiche hat jemand einen Tipp, nach was für Grid-Eigenschaften ich suchen könne, mir fehlt leider jeder Ansatz.

Vielen Dank für eure Hilfe.

Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)

Beitrag von MmVisual »

Ich habs rausgefunden...

Code: Alles auswählen

BM := MyQuery.GetBookmark;
MyQuery.GotoBookmark(BM);
MyQuery.FreeBookmark(BM);
EleLa - Elektronik Lagerverwaltung - www.elela.de

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)

Beitrag von mse »

Etwas direkter:

Code: Alles auswählen

TDataSet.Resync([rmcenter]);

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)

Beitrag von MmVisual »

Auf die Idee wäre ich nie gekommen, vielen Dank!
EleLa - Elektronik Lagerverwaltung - www.elela.de

Nihao
Beiträge: 14
Registriert: Do 26. Mai 2016, 13:11

Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile

Beitrag von Nihao »

wie kann ich erreichen, dass der cursor nicht in mitte sondern oben steht? danke.

Nihao
Beiträge: 14
Registriert: Do 26. Mai 2016, 13:11

Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile

Beitrag von Nihao »

kann lazarus nicht markierung im dbGrid auf erste zeile stellen?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile

Beitrag von Michl »

Ganz schönes Gewurstel, aber so habe ich das hinbekommen. Keine Ahnung, ob das nicht auch eleganter geht:

Code: Alles auswählen

uses ..., math;
...
type
  TDBGrid = class(DBGrids.TDBGrid)
    function GetBufferCount: integer; override;
  end;
...
function TDBGrid.GetBufferCount: integer;
begin
  Result := inherited GetBufferCount;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
  aRecNr: Integer;
begin
  SQLQuery1.Locate('Field1', 'SearchText', []);
  aRecNr := SQLQuery1.RecNo;
  SQLQuery1.RecNo := min(aRecNr + DBGrid1.GetBufferCount div 2, SQLQuery1.RecordCount - 1);
  SQLQuery1.MoveBy(aRecNr - SQLQuery1.RecNo);
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten