![]() |
Datenbank: Microsoft Access • Version: kA • Zugriff über: ADO
Dateneingabe über ein DBGrid
'loha Folks,
folgendes Szenario: Auf einem Formular ist ein DBGrid, welches über eine DataSource und eine DataSet Komponente an eine Access Datenbank gebunden ist. Unter dem Grid befindet sich ein Button über welchen es möglich sein soll, genau einen neuen Datensatz in die Datenbank einzufügen. Sobald der Button gedrückt wird, soll im DBGrid eine neue Zeile erscheinen, bei welcher anstelle des Textes Edit Felder erscheinen. Mein Problem ist nun, dass ich es nicht hinbekomme, nach dem Klick auf den Button, im Grid eine neue Zeile erscheinen zu lassen. Alles was bisher geklappt hat ist, mit dem Button-Klick einen neuen Datensatz in die Tabelle zu schreiben. Das heisst, der Klickt führt eine Reihe von überflüssigen Operationen aus. Zuerst Append, damit ein neuer Datensatz angehängt wird, dann schreibe ich etwas in die Felder, um letztenendes mit Post die Sache in die Datenbank zu schreiben und beim gleichzeitigen refresh der Seite (Webapplikation), bei welchem das Grid mit Datensätzen bespickt wird, den neuen leeren Datensatz anzuzeigen. Weiss nicht ob Code hier hilfreich ist, aber die Sache sieht in etwa so aus:
Delphi-Quellcode:
OnRenderCell werden verschiedene Symbole auf dem Grid platziert. Je nach dem worauf man klickt erscheint dann am entsprechenden Ort ein Edit Feld.
procedure TfrmSystem_Masterdata_Floors.grdFloorRenderCell(ACell: TIWGridCell;
const ARow, AColumn: Integer); begin if EditRecNo = 0 then begin UserSession.SetGridHeight(grdFloor, ARow, 0) end else begin USerSession.SetGridHeight(grdFloor, ARow, 6); end; if (ARow <> 0) and (AColumn = 1) and (DataSet.RecNo <> EditRecNo) then begin with ACell do begin Control := TIWImageFile.Create(Self); with TIWImageFile(Control) do begin ImageFile.Filename := './edit.gif'; Hint := 'Datensatz bearbeiten'; Tag := DataSet.RecNo; OnClick := GridEdit; end; end; end; if (ARow <> 0) and (AColumn = 1) and (DataSet.RecNo = EditRecNo) then begin with ACell do begin Control := TIWImageFile.Create(Self); with TIWImageFile(Control) do begin ImageFile.Filename := './save.gif'; Hint := 'Datensatz speichern'; Tag := DataSet.RecNo; OnClick := GridPost; end; end; end; if (ARow <> 0) and (AColumn = 2) and (DataSet.RecNo = EditRecNo) then begin with ACell do begin Control := TIWImageFile.Create(Self); with TIWImageFile(Control) do begin ImageFile.Filename := './cancel.gif'; Hint := 'Abbrechen'; Tag := DataSet.RecNo; OnClick := GridCancel; end; end; end; if (ARow <> 0) and (AColumn = 2) and (DataSet.RecNo <> EditRecNo) then begin with ACell do begin Control := TIWImageFile.Create(Self); with TIWImageFile(Control) do begin ImageFile.Filename := './delete.gif'; Hint := 'Datensatz löschen'; Tag := DataSet.RecNo; OnClick := GridDelete; end; end; end; if (ARow <> 0) and (AColumn = 0) and (DataSet.RecNo = EditRecNo) then begin with ACell do begin Control := TIWDBEdit.Create(Self); Text := ''; with TIWDBEdit(Control) do begin DataSource := UserSession.DataSource_Floor; DataField := 'Floor'; end; end; end; btnNewEntry.Top := grdFloor.Top + grdFloor.Height + btnNewEntry.Margins.Top; end; procedure TfrmSystem_Masterdata_Floors.btnNewEntryClick(Sender: TObject); begin DataSet.Append; // anstatt Append sollte hier irgendwie dem Grid eine neue Zeile zugefügt werden EditRecNo := DataSet.RecNo; end; procedure TfrmSystem_Masterdata_Floors.GridPost(Sender: TObject); begin DataSet.RecNo := (Sender as TIWImageFile).Tag; DataSet.Post; EditRecNo := 0; end; procedure TfrmSystem_Masterdata_Floors.GridDelete(Sender: TObject); begin DataSet.RecNo := (Sender as TIWImageFile).Tag; DataSet.Delete; end; procedure TfrmSystem_Masterdata_Floors.GridEdit(Sender: TObject); begin DataSet.RecNo := (Sender as TIWImageFile).Tag; EditRecNo := DataSet.RecNo; end; procedure TfrmSystem_Masterdata_Floors.GridCancel(Sender: TObject); begin DataSet.Cancel; EditRecNo := 0; end; Was ich jetzt wissen müsste ist folgendes:
Delphi-Quellcode:
^^ nämlich wie ich dem Grid eine neue Zeile anhänge ohne vorher einen Geisterdatensatz in die Tabelle zu schreiben.
procedure TfrmSystem_Masterdata_Floors.btnNewEntryClick(Sender: TObject);
begin DataSet.Append; // anstatt Append sollte hier irgendwie dem Grid eine neue Zeile zugefügt werden EditRecNo := DataSet.RecNo; end; Grüsse hirnstroem |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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