Ich hab's jetzt mit einer "normalen" CheckBox gelöst:
Delphi-Quellcode:
Procedure TFormMain.Check_GesehenClick(Sender: TObject);
begin
IF GL.CheckModus THEN Exit;
GL.CheckModus := True;
DatMod.Aset_Datei.Edit;
DatMod.Aset_Datei.FieldByName('Gesehen').AsBoolean := Check_Gesehen.Checked;
DatMod.Aset_Datei.Post;
DatMod.ViewDateienRefresh;
GL.CheckModus := False;
end;
GL ist eine
Unit mit Globalen Variablen und Konstanten, CheckModus ein Boolean. Der Status von Check_Gesehen wird im AfterScroll des Views aktualisiert (selbstverständlich mit einem Ereignis, das in der Formular-
Unit abgefangen wird). Das Flag GL.CheckModus ist deshalb notwendig, weil beim Ändern des Checkstatus, was ja beim Scrollen passiert, ebenfalls das Ereignis OnClick ausgelöst wird. So funktioniert's auf jeden Fall einwandfrei, das View wird sofort aktualisiert, ohne daß der Anwender erst einen anderen Datensatz anwählen muß.
DatMod.ViewDateienRefresh ist eine Public-Methode im Datenmodul, die ich benötige, weil das normale Refresh offenbar nicht korrekt arbeitet. Ersetze ich DatMod.ViewDateienRefresh durch DatMod.Tab_VDateien.Refresh, erhalte ich diese Fehlermeldung:
Nicht genügend Basistabelleninformationen zum Aktualisieren
Delphi-Quellcode:
Procedure TDatMod.ViewDateienRefresh;
Var
Merk : Integer;
begin
Merk := Aset_Datei.FieldByName('Id_Video').AsInteger;
Tab_VDateien.Close;
Tab_VDateien.Open;
Tab_VDateien.Locate('Id_Video',Merk,[]);
end;
wenn Du ungepostete Werte darstellen willst könntest Du ein berechnetes Feld in das Dataset von V_Dateien aufnehmen, oder die Checkbox Direkt an die View binden.
Es handelt sich um ein sehr komplexes View, das Werte aus etlichen Subtabellen interpretiert und darstellt. Mit einem Datenbank-View kann ich einfacher und effizienter arbeiten als mit Lookup-Feldern, die auf Clientseite erstellt werden. Auch das Sortieren nach diversen Spalten gestaltet sich einfacher. Wollte ich deinen Vorschlag umsetzen, müßte ich die Anwendung komplett umbauen.
AfterScroll könnte auch gehn ... das wird doch bei einem Post ebenfalls ausgelöst.
Es geht aber gerade um das Post: Das wird beim Ändern des Checkstatus einer TDBCheckBox erst ausgelöst, wenn sich der Datensatzzeiger ändert. Durch reines Klicken auf die Komponente passiert noch gar nix.