![]() |
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:
und das selbe muss ich jetzt in einem dbgrid machen wie geht das?
x:=grid1.Col;
y:=grid1.Row; nr := grid1.Cells[7,y]; mfg nonkonformist |
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 ![]() |
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:
Grüße vom marabu
ShowMessage(DBGrid.DataSource.DataSet.FieldByName(YourFieldName).AsString);
|
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.
|
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 |
Re: dbgrid select
Einfach im DBGrid unter Options
![]() |
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 |
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:
Das Steuerelement siehst Du Links im Bild.
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; ![]() hoffe es hilft Dir. mfg, silence |
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