'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