Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2010
JXJ JXJ is offline
Miembro
 
Registrado: Apr 2005
Posts: 2.473
Poder: 16
JXJ Va por buen camino
Question DBGRID ¿como seleccionar fila y obtener datos de la fila ?

¿como seleccionar fila y obtener datos de la fila dbgrid ?

tengo una tabla que tiene los datos

empresa
rfc
domicionio
email
sitioweb

y los muestro en un dbgris con un query selec * from empresa
para mostras todas las empresas listadas y sus datos

ahora lo que quiero es que
al seleccionar una celda de se seleccione automaticamente la fila completa
y obtener los datos de esa fila. para pasarlos a unos edits.

¿como se puede hacer eso?

le he estado viendo si hay algun codigo para seleccionar la fila completa segun la celda selecionada y no lo logro
he probado,, como saber los datos de la fila segun la celda seleccionada y tampo encuentro como hacerlo..

ayuda.. de favor..

gracias.
Responder Con Cita
  #2  
Antiguo 21-09-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.181
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
En las opciones del DBGrid puedes poner dgRowSelect en true para que se selecciones toda la fila. Y lo de pasar a los Edit, ¿por qué no mejor usas DBEdit para que automáticamente muestre los datos del registro seleccionado?

// Saludos
Responder Con Cita
  #3  
Antiguo 21-09-2010
JXJ JXJ is offline
Miembro
 
Registrado: Apr 2005
Posts: 2.473
Poder: 16
JXJ Va por buen camino
hace como 1 año recuerdo que en este foro habia el codigo fuente para esas cosas
lo busco y no lo encuentro..
necesito que sean edits. o variables string o integer.
para poder hacer modificaciones a otros controles segun
se requiera
Responder Con Cita
  #4  
Antiguo 21-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.118
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JXJ.

Me resultó interesante hacerlo, aunque dudo de su utilidad...

Lo que hice fué pasar las columnas del DBGrid a tantos edits como tenga la misma, cuando se hace un click sobre una celda.
Con pocas modificaciónes y del mismo modo; podrías pasar las columnas a TStrings, no tán vistoso, pero más simple y efectivo
si sólo buscas pasar los valores a variables.

Pero bueno, fijate si te sirve o al menos te dá una idea de como hacerlo:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBDataSet1: TIBDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i,c: Integer;
begin
  IBDataSet1.Open;   
  c:= DBGrid1.Top + DBGrid1.Height + 8;    // Posición del 1er Edit
  for i:= 0 to DBGrid1.Columns.Count -1 do // Tantos Edits como columnas mostradas
  begin
   with TEdit.Create(Self) do        // Crear Edits
   begin
     Name:= 'Edit'+IntToStr(i);      // Edit1, Edit2,... EditN
     Text:= '';
     Left:= 8;
     Top:=  c;
     Parent:= Self;                  // Mostrarlo
     Inc(c,30);                      // Supongo Heigth 25
   end;
  end;
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  i: Integer;
begin
  for i:= 0 to DBGrid1.Columns.Count -1 do
   with TEdit(FindComponent('Edit'+IntToStr(i))) do
   begin
     Text:= DBGrid1.Columns[i].Field.AsString; // Poner dato en Edit
     Width:= Canvas.TextWidth(DBGrid1.Columns[i].Field.AsString+'0'); // Ajustar ancho Edit 
   end;
end;

Nota: No tiene en cuenta el Height del Form respecto a la cantidad de campos, es decir que si tenés 50 campos, vas a tener que modificar algo, o comprar un monitor mas alto...


Saludos.

Última edición por ecfisa fecha: 21-09-2010 a las 07:10:06.
Responder Con Cita
  #5  
Antiguo 21-09-2010
rrf rrf is offline
Miembro
 
Registrado: Aug 2003
Ubicación: S/C Tenerife, España
Posts: 404
Poder: 16
rrf Va por buen camino
Smile

A ver si esto te sirve...

Utilizo los IBX con Delphi 7 y he hecho algo parecido a lo que tú comentas.

En el evento AfterScroll del IBDataset (seguramente existe ese mismo evento en otro tipo de Dataset), pones una condición if..then que se cumplirá cuando estés en el form que tiene ese DBGrid.

Dentro de ese if..then pones la asignación del contenido de cada campo al edit que le corresponda.

Sería algo así:

Código Delphi [-]
procedure TDModule.DataSet_AfterScroll(DataSet: TDataSet);
begin

  if Ante_el_DBGrid   // variable boolean que indica que está ante el DBGrid
  then
    begin
      Form_con_DBGrid.Edit1.text := DataSet_Campo1.asstring ;
      Form_con_DBGrid.Edit2.text := inttostr(DataSet_Campo2.asinteger) ;
      // ...
      // Etc, etc...
    end ;        

end;

Así, cada vez que hagas clic en el DBGrid o te muevas por él con las teclas de flecha, se pone en marcha este evento y se actualizan los Edit con el contenido de los campos.

Espero que te sirva.
Responder Con Cita
  #6  
Antiguo 18-04-2017
Yhimy_1 Yhimy_1 is offline
Registrado
 
Registrado: Apr 2017
Posts: 1
Poder: 0
Yhimy_1 Va por buen camino
Repuesta !

Yo lo he trabajado así , y funciona correctamente ! espero que le sea de ayuda .


Código:
procedure TForm1.dbgrd1CellClick(Column: TColumn);
begin
     if cbbOpciones.ItemIndex =1 then
     begin
         txtNombre.Text      :=   Column.Field.DataSet.Fields[1].Value;
         txtCompanyName.text :=   Column.Field.DataSet.Fields[2].Value;
         txtCompanyId.Text   :=   Column.Field.DataSet.Fields[3].Value;
         txtCountry.Text     :=   Column.Field.DataSet.Fields[4].Value;

     end
     else if  cbbOpciones.ItemIndex =2 then
     begin
           txtCompanyId.Text   :=   Column.Field.DataSet.Fields[3].Value;
     end;


end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Seleccionar fila DBgrid ?? Coco_jac Varios 3 25-05-2010 16:58:41
Seleccionar una fila de un DBGrid chinchan C++ Builder 3 09-03-2010 16:58:37
seleccionar y modificar fila por fila enMYSQL schaka SQL 14 20-03-2008 06:06:23
Seleccionar una fila en un DBGRID erickperez6 Conexión con bases de datos 1 02-05-2004 16:49:34
seleccionar fila de un DBGrid empty Varios 1 31-03-2004 12:00:47


La franja horaria es GMT +2. Ahora son las 10:55:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi