Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Rückgabe aus Stringgrid (https://www.delphipraxis.net/110820-rueckgabe-aus-stringgrid.html)

Privateer3000 25. Mär 2008 12:19


Rückgabe aus Stringgrid
 
Hiho,

wie kann ich mir ein Rückgabewert liefern lassen
welche Zeile in einem Stringgrid markiert wurde (vom Anwender).
Hintergrund ist der:
der Inhalt einer DB soll in dem Grid angezeigt werden,
dann kann in dem Grid eine Zelle markiert werden.
Mit anschliessendem Druck auf einen Button soll der
Datensatz gelöscht werden...

Ich brauche also den Inhalt aus einer Zelle in der markierten Zeile.
Es besteht ja die Möglichkeit das irgendeine Zelle in der markierten
Zeile geklickt wurde, also brauch ich die gesamte Zeile, dann erst die
Zelle.

Grüße

toms 25. Mär 2008 12:21

Re: Rückgabe aus Stringgrid
 
Hallo,

Handelt es sich wirklich um ein TStringGrid oder ein TDBGrid?

mkinzler 25. Mär 2008 12:21

Re: Rückgabe aus Stringgrid
 
Reagiere doch den CellClick-Event.

Klaus01 25. Mär 2008 12:23

Re: Rückgabe aus Stringgrid
 
Hallo,

vielleicht mit MouseToCell die Reihe und Spalte ermitteln.

Delphi-Quellcode:
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  col, row: Integer;
begin
  if button = mbright then
    begin
      StringGrid1.MouseToCell(X,Y,col,row);
    end;
end;
Grüße
Klaus

Privateer3000 25. Mär 2008 12:27

Re: Rückgabe aus Stringgrid
 
Zitat:

Zitat von mkinzler
Reagiere doch den CellClick-Event.

ja aber wie bekomme ich den Rückgabewert wo geklickt wurde?

mkinzler 25. Mär 2008 12:33

Re: Rückgabe aus Stringgrid
 
Hab das mit dem stringGrid überlesen und ging von einem DBGrid aus.
Dem Event wird die Spalte übergeben. Die Zeile ist ja der aktive Datensatz.

TeronG 25. Mär 2008 12:40

Re: Rückgabe aus Stringgrid
 
Zitat:

Zitat von toms
Hallo,

Handelt es sich wirklich um ein TStringGrid oder ein TDBGrid?

bei TStringGrid:
StringGrid1.Row und StringGrid1.Col

Privateer3000 25. Mär 2008 13:04

Re: Rückgabe aus Stringgrid
 
danke Leute,

sollte ich vielleicht für dieses Vorhaben
etwas anderes wählen als ein Stringgrid?

mkinzler 25. Mär 2008 13:08

Re: Rückgabe aus Stringgrid
 
Was spricht denn gegen ein DBGrid?

Privateer3000 25. Mär 2008 13:48

Re: Rückgabe aus Stringgrid
 
eigentlich nichts
ich probiers es aus.
Danke

Privateer3000 25. Mär 2008 15:00

Re: Rückgabe aus Stringgrid
 
so, habs ausprobiert.
Bekomme aber keine Werte zurück
mittels Selectedrows...

um zu sehen ob ausgelesen wird
wird es mittels Listbox angezeigt.
Quell ist aus der OH.
Delphi-Quellcode:
procedure Tartgruppen.ggridCellClick(Column: TColumn);
var
  i, j: Integer;
  s: string;
begin
  if ggrid.SelectedRows.Count>0 then
  with ggrid.DataSource.DataSet do
    for i:=0 to ggrid.SelectedRows.Count-1 do
      begin
        GotoBookmark(pointer(ggrid.SelectedRows.Items[i]));
        for j := 0 to FieldCount-1 do
        begin
          if (j>0) then s:=s+', ';
          s:=s+Fields[j].AsString;
        end;
        Listbox1.Items.Add(s);
        s:= '';
      end;
end;

mkinzler 25. Mär 2008 15:04

Re: Rückgabe aus Stringgrid
 
Da ein DBGrid ein DataSet visualisiert, würde ich direkt über das DataSet zugreifen

Privateer3000 26. Mär 2008 09:06

Re: Rückgabe aus Stringgrid
 
Hiho,
das ganze funktioniert einfach nicht.
Die Listbox bleibt leer...
hier mal der ganze Code, wenn ihr bitte mal drüber guckt:
Delphi-Quellcode:
type
  Tartgruppen = class(TForm)
    gruname: TEdit;
    gquer: TADOQuery;
    sPanel1: TsPanel;
    speichern: TsButton;
    loesch: TsButton;
    sLabel1: TsLabel;
    sLabel2: TsLabel;
    ggrid: TDBGrid;
    gsource: TDataSource;
    upquer: TADOQuery;
    ListBox1: TListBox;
    upds: TDataSource;
    procedure speichernClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure ggridCellClick(Column: TColumn);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  artgruppen: Tartgruppen;

implementation

{$R *.dfm}
uses haupt,DatenModulUnit;

procedure auslesen(const grid:TDBGrid; ugquer:TADOQuery);
var xc: Integer;
begin
grid.Columns[0].Width:=20;
grid.Columns[1].Width:=170;
ugquer.Close; ugquer.SQL.Clear;
ugquer.SQL.Add('SELECT * FROM artgr');
ugquer.Open;
end;

procedure Tartgruppen.speichernClick(Sender: TObject);
begin
gquer.Close; gquer.SQL.Clear;
gquer.SQL.Add('INSERT INTO artgr (NAME) VALUES ('+QuotedStr(gruname.Text)+')');
gquer.ExecSQL;
auslesen(ggrid,upquer);
gruname.SetFocus;
gruname.Text:='';
end;

procedure Tartgruppen.FormActivate(Sender: TObject);
begin
auslesen(ggrid,upquer);
end;

procedure Tartgruppen.ggridCellClick(Column: TColumn);
var
  i, j: Integer;
  s: string;
begin
  if ggrid.SelectedRows.Count>0 then
  with ggrid.DataSource.DataSet do
    //with ggrid1.DataSource.DataSet do
      for i:=0 to ggrid.SelectedRows.Count-1 do
      begin
        GotoBookmark(pointer(ggrid.SelectedRows.Items[i]));
        for j := 0 to FieldCount-1 do
        begin
          if (j>0) then s:=s+', ';
          s:=s+Fields[j].AsString;
        end;
        Listbox1.Items.Add(s);
        s:= '';
      end;
end;

Sharky 26. Mär 2008 09:19

Re: Rückgabe aus Stringgrid
 
Hai Privateer3000,

wie mkinzler schon sagte würde ich nicht über das TDBGrid arbeiten. Den Spaltenwechsel bekommst Du im OnAfterScroll des DataSet.
Dort würde ich dann die Listbox füllen.

Privateer3000 26. Mär 2008 09:27

Re: Rückgabe aus Stringgrid
 
Hai
ich will keine Listbox füllen,
die ist nur zur kontrolle da.
Im Endeffekt soll der Datensatz gelöscht werden
der im DBGrid markiert wurde.

Sharky 26. Mär 2008 09:32

Re: Rückgabe aus Stringgrid
 
Zitat:

Zitat von Privateer3000
... Im Endeffekt soll der Datensatz gelöscht werden
der im DBGrid markiert wurde.

Na dann mache es doch einfach. Das DBGrid zeigt nur Daten an. Der Datensatzzeiger des Query steht immer auf dem im Gridmarkierten Datensatz. Also musst Du doch nur ein:
Delphi-Quellcode:
begin
  query.delete;
end;
machen.

Privateer3000 26. Mär 2008 12:19

Re: Rückgabe aus Stringgrid
 
Danke,
welche komponenten sind dafür nötig?
zu dem DBGrid gehören im Moment ein Datasource
und ein ADOQuery und wie müssen die konfiguriert werden.


Grüße

Privateer3000 26. Mär 2008 13:01

Re: Rückgabe aus Stringgrid
 
um ihn zur Kontrolle auch anzuzeigen hab ich das versucht:
Delphi-Quellcode:
procedure Tartgruppen.ggridCellClick(Column: TColumn);
begin
  if ggrid.SelectedRows.Count>0 then
  gruname.Text:=gquer.Fields[1].Value;
end;
das funktioniert nicht.

Das mit dem löschen klappt aber!


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