Einzelnen Beitrag anzeigen

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