PDA

Ver la Versión Completa : seleccionar una fila y bloquear el resto dbgrid


giocatore
15-11-2013, 23:43:39
buenas tardes, quisiera me ayuden en mi duda que es la siguiente:

Quiero poder seleccionar una fila de un dbgrid y al momento de hacer clic en la celda toda la fila pueda ser editable y el resto de las filas queden como "read only" espero puedan ayudarme. Un saludo!

newtron
16-11-2013, 09:35:25
Hola.

Imagino que sabrás que en el dbgrid es bastante engorroso controlar la edición: tipos de campo, longitud, validaciones, etc. No sé si lo que quieres es posible pero igual te interesaría más dejar el dbgrid en modo lectura y que cuando se pulse en la fila deseada se activara un panel con edits para poder editar los campos del mismo.

Saludos

Caminante
16-11-2013, 16:13:35
buenas tardes, quisiera me ayuden en mi duda que es la siguiente:

Quiero poder seleccionar una fila de un dbgrid y al momento de hacer clic en la celda toda la fila pueda ser editable y el resto de las filas queden como "read only" espero puedan ayudarme. Un saludo!

No le veo mucho sentido a esto. Sabras que al cambiar de fila el registro automaticamente seria grabado asi q de poco serviria un "readonly" a otras filas.
En ese caso mejor editar los registro en otro form como indica marteens en la cara oculta...

Saludos

giocatore
28-11-2013, 02:09:41
No le veo mucho sentido a esto. Sabras que al cambiar de fila el registro automaticamente seria grabado asi q de poco serviria un "readonly" a otras filas.
En ese caso mejor editar los registro en otro form como indica marteens en la cara oculta...

Saludos

Gracias por los consejos, pero como se imaginarán siempre queda la duda de como hacerlo y la verdad por más que no lo use me interesa mucho saber como resolver este problema. :)

ecfisa
28-11-2013, 05:08:27
Gracias por los consejos, pero como se imaginarán siempre queda la duda de como hacerlo y la verdad por más que no lo use me interesa mucho saber como resolver este problema. :)
Hola giocatore.

Un modo puede ser:

type
TForm1 = class(TForm)
...
DBGrid1: TDBGrid;
bnGuardar: TButton;
procedure FormCreate(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure bnGuardarClick(Sender: TObject);
private
FDisplacement: Boolean;
procedure DataSetBeforeScroll(DataSet: TDataSet);
public
end;

...

implementation

procedure TForm1.DataSetBeforeScroll(DataSet: TDataSet);
begin
if not FDisplacement then // ¿ Desplazamiento prohibido ?
Abort; // Si, abortar
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FDisplacement := True; // permitir desplazamiento
DBGrid1.DataSource.DataSet.BeforeScroll := DataSetBeforeScroll;
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
FDisplacement := False; // prohibir desplazamiento
end;

// En algún punto del programa se debe permitir nuevamente el desplazamiento, por ejemplo:
procedure TForm1.bnGuardarClick(Sender: TObject);
begin
with DBGrid1.DataSource.DataSet do
if State = dsEdit then
DBGrid1.DataSource.DataSet.Post;
FDisplacement := True; // permitir desplazamiento
end;


Saludos :)