Para conseguir que al entrar en cada celda de un DBGrid lo haga en modo edición, como si pulsaras la tecla F2, aparte de activar dgEditing y dgAlwaysShowEditor en Options, hay que recurrir al método EditorMode de la clase TCustomGrid, que logra que aparezca el cursor parpadeando al final, pero éste es
protected. Así que una forma de solucionarlo es declarar una clase que haga de intermediaria:
Código:
TMyGrid = class(TCustomGrid)
public
property EditorMode;
end;
El método debe aplicarse cada vez que se cambia de celda. Un problema de los DBGrids es que aunque permiten detectar cuándo se ha cabiado de columna, no así de fila. Debe haber otras soluciones pero se me ocurre que puedes situar un TDataSource ligado al mismo DataSet (o usar el mismo DataSource que el DBGrid si se encuentra en el mismo Form) e interceptar cuándo se ha cambiado de registro. Éste sería el código:
Código:
// interceptamos el OnColEnter del DBGrid
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
var
AField : TField;
begin
TMyGrid(DBGrid1).EditorMode := TRUE;
AField := DBGrid1.SelectedField;
if (AField <> nil) AND (AField.FieldName = 'Poblacion') AND
(AField.IsNull) then
begin
AField.DataSet.Edit;
AField.AsString := 'Ciudad Real';
end;
end;
// interceptamos el evento OnDataChange del DataSource
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if Field = nil then DBGrid1ColEnter(Sender);
end;