AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Dateneingabe über ein DBGrid
Thema durchsuchen
Ansicht
Themen-Optionen

Dateneingabe über ein DBGrid

Ein Thema von hirnstroem · begonnen am 24. Okt 2006
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Dateneingabe über ein DBGrid

  Alt 24. Okt 2006, 13:11
Datenbank: Microsoft Access • Version: kA • Zugriff über: ADO
'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:
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;
OnRenderCell werden verschiedene Symbole auf dem Grid platziert. Je nach dem worauf man klickt erscheint dann am entsprechenden Ort ein Edit Feld.

Was ich jetzt wissen müsste ist folgendes:

Delphi-Quellcode:
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;
^^ nämlich wie ich dem Grid eine neue Zeile anhänge ohne vorher einen Geisterdatensatz in die Tabelle zu schreiben.

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 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