PDA

Ver la Versión Completa : Cxgrid celda readonly


dfarias
02-02-2021, 07:37:43
Quisiera saber si existe alguna forma de poder hacer que algunas celdas de un Cxgrid puedan convertirse, en runtime, a READONLY según el valor del registro. Todo el grid será editable pero si el valor que tiene un determinado registro es x solo podra modificar algunas columnas/celdas.

Neftali [Germán.Estévez]
02-02-2021, 09:11:58
Dentro de la propiedad Properties de las columnas del cxGrid tienes la propiedad ReadOnly, que puedes cambiar en ejecución:

// Por ejemplo en el evento OnDBTableViewFocusedRecordChanged puedes hacer...
CodigoColumn.Properties.ReadOnly := ...

dfarias
02-02-2021, 12:13:05
Si no entiendo mal lo que tu comentas es valido para una columna.

tipo dato 1 dato 2 dato 3 dato 4 dato 5
1 Carga peso 1000 bcn
2 Carga litros 200
J Descarga bultos 4
X Descarga pack amarilla amarilla
1 Carga peso 1000 bcn
2 Carga litros 200
J Descarga bultos 4

Pero lo que intento hacer es que por ejemplo si el valor de tipo es X no deje modificar las celdas amarillas

Pongo la imagen (con columnas) para que se entienda mejor.

https://i.imgur.com/NxcuwTV.png

Neftali [Germán.Estévez]
02-02-2021, 13:21:36
Con un código como este:



procedure TForm1.cxGrid1DBTableView1Editing(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; var AAllow: Boolean);
var
ARecordIndex: Integer;
AValue: Variant;
begin
if (AItem.Index = cxGrid1DBTableView1dato3.Index) or (AItem.Index = cxGrid1DBTableView1dato5.Index) then
begin
ARecordIndex := cxGrid1DBTableView1.DataController.FocusedRecordIndex;
AValue := cxGrid1DBTableView1.DataController.Values[ARecordIndex, cxGrid1DBTableView1dato2.Index];
AAllow := (AValue <> 'pack');
end;
end;


Consigues que la columna dato3 y dato5 sean ReadOnly si el valor de dato2 es igual a "pack".
Puedes modificar las condiciones como necesites.


https://i.ibb.co/X5kHxpV/cx-Grid-Read-Only.gif

También se puede hacer de otras formas.
Aquí tienes un ejemplo utilizando el evento OnEditing (https://supportcenter.devexpress.com/ticket/details/t654665/set-readonly-a-cell-according-the-value-of-another-field-of-the-same-row).

dfarias
11-02-2021, 11:26:54
Perdón por no responder antes pero salte a otro proyecto y aqui vuelvo otra vez. Perfecto es justamente lo que no lograba conseguir. Muchas gracias Germán.