Col.SetReadOnly > Grid.InvalidateCol scheint wohl nur die Anzeige/Grafik, aber nicht den ReadOnly-Status zu aktualisieren.
Delphi-Quellcode:
procedure TForm1.dbGridAssistentenCellClick(Column: TColumn);
begin
if Column.Field.FieldName='markiert' then
Column.ReadOnly := True;
end;
procedure TForm1.dbGridAssistentenDblClick(Sender: TObject);
begin
//if not (cdAssistent.State in [dsEdit,dsInsert]) then // Edit macht eh nichts, wenn es schon im Edit/Insert-Modus ist
cdAssistent.Edit;
if dbGridAssistenten.SelectedField.FieldName='markiert' then // was wohl passiert, wenn kein Feld markiert währe?
begin
if dbGridAssistenten.SelectedField.AsString='' then
dbGridAssistenten.SelectedField.AsString := 'x'
else
dbGridAssistenten.SelectedField.AsString := '';
cdAssistent.Post;
// hier das Grid dazu bringen den "Eingabe"-Modus zu beenden
end;
end;
Coumn.ReadOnly := True;
: ReadOnly wird bestimmt schon beim ColumChange ausgewertet,
aber warum erst beim Click setzen und nicht gleich im FormCreate, beim Laden der Daten oder nach Erstellen der Gridspalten?
cdAssistent.Post;
speichert nur das DataSet, aber das DataSet hat nichts mit dem Grid zu tun, bzw. die beiden "EDIT" sind nicht das Selbe/Gleiche.
Das DataSet wird (automatisch) erst bei einer Wert-Änderung in den Editmodus versetzt und die Zelle ist schon vorher unabhängig in ihrem
EditEingabeModus.
Du könntest es mit den Protected-Methoden Grid.InvalidateEditor und Grid.ShowEditor versuchen, welche den InplaceEditor aktualisieren. (Grid.UpdateEdit)