Ik ben bezig met een factuur programma zoals te zien is in de afbeelding
Nu was mijn bedoeling dat ik dus een record tussen bijvoorbeeld de 2e en de 3e record toe wil voegen.
De dataset heeft een Autoinc veld waardoor ik dus geen normale insert comando kan geven.
Ik begin dus met de focus van het record op te slaan in de variabel "CurrentRecordNr".
Code:
CurrentRecordNr:=ClientDataSetInhoudB.RecNo;
TotaalAantaRecords:=ClientDataSetInhoudB.RecordCount;
ClientDataSetInhoudB.DisableControls;
ClientDataSetInhoudB.Last;
Daarvna ga ik dus eerst een lege regel toevoegen en vul deze met de onderste bestaande record...
Code:
// Append een nieuw record
aField := VarArrayCreate(
[0,ClientDataSetInhoudB.Fieldcount-1],
VarVariant);
for i := 1 to (ClientDataSetInhoudB.Fieldcount-1) do
begin
aField[i] := ClientDataSetInhoudB.fields[i].Value ;
end;
ClientDataSetInhoudB.Append ;
for i := 1 to (ClientDataSetInhoudB.Fieldcount-1) do
begin
ClientDataSetInhoudB.fields[i].Value := aField[i] ;
end;
Daarna verschuif ik net zolang de bestaande record naar onderen tot de record waar de focus op lag in het factuur programma.
Code:
for Lus1 := TotaalAantaRecords downto CurrentRecordNr do
begin
ClientDataSetInhoudB.RecNo:=Lus1;
// Create a variant Array
aField := VarArrayCreate(
[0,ClientDataSetInhoudB.Fieldcount-1],
VarVariant);
// read values into the array
for i := 1 to (ClientDataSetInhoudB.Fieldcount-1) do
begin
aField[i] := ClientDataSetInhoudB.fields[i].Value ;
end;
ClientDataSetInhoudB.Next;
ClientDataSetInhoudB.edit;
// Put array values into new the record
for i := 1 to (ClientDataSetInhoudB.Fieldcount-1) do
begin
ClientDataSetInhoudB.fields[i].Value := aField[i] ;
end;
ClientDataSetInhoudB.Post;
end;
Tot slot nog een kleine afhandeling zodat het nieuw tussengevoegd record wordt gevuld met de belangrijkste gegevens.
Code:
ClientDataSetInhoudB.Prior;
ClientDataSetInhoudB.edit;
for i := 1 to (ClientDataSetInhoudB.Fieldcount-1) do ClientDataSetInhoudB.Fields[i].Clear;
ClientDataSetInhoudB.FieldByName('Geleverd').AsBoolean:= False;
ClientDataSetInhoudB.FieldByName('IngevoerdDoorUser').AsString:=User;
ClientDataSetInhoudB.Post;
ClientDataSetInhoudB.EnableControls;
Nu heb ik aan de xgrid een popupmenu toegevoegd waarbij een druk op de knop in het popupmenu deze code wordt aangeroepen.
Ik kan tig keer via de popupmenu een lege regel toevoegen zonder problemen.
Als ik echter via devolgende manier een regel tussenvoeg dan krijg ik na een aantal keer die vervelende foutmelding
Code:
procedure TForm1.cxGridDBTableView5EditKeyDown(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; AEdit: TcxCustomEdit; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_INSERT then Tussenvoegennieuweregel1Click(self);
Bookmarks