Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi dbgrid select (https://www.delphipraxis.net/57204-dbgrid-select.html)

nonkonformist 17. Nov 2005 08:37

Datenbank: mysql • Zugriff über: odbc

dbgrid select
 
wie kann ich rausfinden welcher datensatz im dbgrid markiert ist?
kein multiselect.
ich müsste wenn ich weis welche zeile markiert is zu einer bestimmten columne springen und die dann auslesen.
bei einem stringgrid mach ich das so:
Code:
x:=grid1.Col;
y:=grid1.Row;

nr := grid1.Cells[7,y];
und das selbe muss ich jetzt in einem dbgrid machen wie geht das?

mfg nonkonformist

Sharky 17. Nov 2005 08:44

Re: dbgrid select
 
Hai nonkonformist,

ersteinmal: "Herzlich Willkommen in der Delphi-PRAXiS" :hi:

Ein DBGrid ist ja immer mit einem TDataSet verbunden (TTable oder TQuery). Diese Haben die Eigenschaft Delphi-Referenz durchsuchenRecNo. In dieser steht immer die Nummer des aktuellen Datensatzes.

marabu 17. Nov 2005 08:47

Re: dbgrid select
 
Herzlich willkommen in der Delphi-PRAXiS, nonkonformist.

Nochmal mit anderen Worten (moin Sharky).

Auf den selektierten Datensatz im DBGrid greifst du ganz einfach über den DataSet zu:

Delphi-Quellcode:
ShowMessage(DBGrid.DataSource.DataSet.FieldByName(YourFieldName).AsString);
Grüße vom marabu

dfried 17. Nov 2005 08:48

Re: dbgrid select
 
Wenn ein Datensatz im dbgrid markiert ist steht der Datensatzzeiger der Table/Query normal immer schon auf dem markierten Datensatz und du kannst dann einfach mit FieldByName('Feldname') auf den entsprechenden Wert zugreifen.

nonkonformist 17. Nov 2005 09:24

Re: dbgrid select
 
Danke jungs geht alles.
hab es mit dem Q_1.fieldbyname().asstring gemacht.

jetzt hab ich nur noch das das prob das selectet nicht gleich selectet is.
also wenn ich mit den courser durchs grid gehe ist das ja kein select sondern nur ein focus.
wie kann ich denn das problem beheben?

mfg nonkonformist

Sharky 17. Nov 2005 09:36

Re: dbgrid select
 
Einfach im DBGrid unter Options Delphi-Referenz durchsuchenRawSelect := True;

nonkonformist 17. Nov 2005 09:41

Re: dbgrid select
 
hab rowselect = true
ich kann sie ja selectieren aber wenn ich mim courser durchs grid gehen dann hab ich keinen select auf die zeile sondern nur einen focus

rainer4you 1. Dez 2005 11:09

Re: dbgrid select
 
DefaultDrawing:= False; //in den DBGrid-Eigenschaften

Im Ereignis OnDrawColumnCell findest Du dann alles was Du brauchst.

Hie mußt Du den 'State = []' auswerten und zwar beide Ereignisse, 'Selected und Focused'.

Natürlich mußt Du Dich nun selber um das zeichnen der Zelle kümmern.
Im Beispiel setze ich vor den selektierten Datensatz eine Bitmap aus der ToolbarImages,
da ich das Grid als Steuerelement für meine Datenbank benutze.
Ebenso setzt sich die Anzeige aus den Datenfeldern 'Name' und 'Vorname' und einer Einrückung zusammen.

Das ganze hat den zusätzlichen Vorteil das es auch bei gefilterten Datenmengen funktioniert, was über die RecNum
mit einem eingesetzten Filter nicht möglich ist.

Delphi-Quellcode:
procedure TForm1.OnDrawColumnCell(Sender: TDBGrid; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState; MyTable: TADOTable);
var
  MyText : string;
  bmpImage : TBitmap;
begin
    if State = [gdSelected..gdFocused] then
    begin
      bmpImage := TBitmap.create;
      ToolbarImages.GetBitmap(15,bmpImage);
      Sender.Canvas.Font.Style:= [fsBold];
      Sender.Canvas.FillRect(Rect);
      MyText:= ' '+ DataSource11.DataSet['Name']+ ', ' + DataSource11.DataSet['Vorname'];
      Sender.Canvas.TextRect(Rect,Rect.Left+16,Rect.Top+2,MyText);
      Sender.Canvas.DrawFocusRect(Rect);
      Sender.Canvas.Draw(1,1+Rect.Top,bmpImage);
      bgLabel.Color:= Sender.Canvas.Brush.Color;
      bmpImage.Free;
    end
    else begin
      Sender.Canvas.Font.Style:= [];
      Sender.Canvas.FillRect(Rect);
      MyText:= ' '+ DataSource11.DataSet['Name']+ ', ' + DataSource11.DataSet['Vorname'];
      Sender.Canvas.TextRect(Rect,Rect.Left,Rect.Top,MyText);
      bgLabel.Color:= Sender.Canvas.Brush.Color;
    end;
end;
Das Steuerelement siehst Du Links im Bild.
Datenbank-Bild

hoffe es hilft Dir.
mfg, silence

Sharky 1. Dez 2005 14:24

Re: dbgrid select
 
Hai rainer4you,

sei doch bitte so lieb und hänge das Bild als Anhang an deinen Beitrag.
Auch wenn es nur 62 KB gross ist werden es dir alle User die mit einen Modem bzw. ohne eine Flatrate im großen Netz unterwegs sind danken.

Danke :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 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