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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2014
principiodual principiodual is offline
Miembro
NULL
 
Registrado: ago 2014
Posts: 26
Poder: 0
principiodual Va por buen camino
Obtener dato de una celda especifica DBGRID

Buenas tardes a todos, he tenido que crear un tema ya que he visitado varios link que se acercan a lo que busco o pero ninguno hace realmente lo que busco y por falta de sintaxis no he podido resolverlo yo mismo lamentablemente... Explico el asunto a ver si alguién me puede ayudar o por lo menos orientar. Muchas gracias de ante mano.

En primera instancia buscaba alguna manera de obtener el valor de una celda en la que haga clic dentro de un DBGRID, no de la manera en que muchos piensan.

en el evento Oncellclick del DBGRID Y PONGO:

Código Delphi [-]
DATO_CAPTURADO:=Form5.DBGrid1.DataSource.DataSet.FieldByName('CODMONEDA').AsInteger;

Porque siempre voy a capturar el valor CODMONEDA según la fila donde me posicione... pero en mi caso tengo 4 campos en mi tabla
CODMONEDA,FECHAINICIAL, FECHAFINAL, NATURALEZACUENTA...

yo lo que deseo es que si me posiciono con el mouse y doy clic en una celda por ejemplo FECHAFINAL, el tome el valor de la fecha, no siempre del mismo dato, sino que dependiendo del dato donde de clic sea el dato que obtengo.

pero como al parecer no existe un tema que toque esto, me iría por lo más fácil que sería tomar el indice o la posición de la celda, es decir
si me posiciono en la celda de la columna FECHAFINAL, en ves de traerme el dato que sería por ejemplo un: 12/12/2012, me traería un 3, ya
que es la tercera posición de la fila en la que esté posicionado y haría algo como esto:

IF POSICIÓN_OBTENIDA = 1 then DATO_CAPTURADO:=Form5.DBGrid1.DataSource.DataSet.FieldByName('CODMONEDA').AsInteger
ELSE IF POSICIÓN_OBTENIDA = 2 DATO_CAPTURADO:=Form5.DBGrid1.DataSource.DataSet.FieldByName('FECHAINICIAL').AsInteger
ELSE etc.. etc...


y de esa manera obtener de una forma menos decorosa el dato que requiero... espero no sea tan difícil obtener la posición de la celda en la
que se de clic...

Este método que desarrollo el amigo ECFISA, funciona a la perfección y fue lo mas cercano a lo que busco que encontré salvo con la cuestión
de que el dato no lo obtengo por eventos de OncellClick que sería lo ideal sino por datos ingresados por el usuario o datos predefinidos, estoy buscando la manera de adaptarlo a lo que busco que es, en ves de asignarle datos de filas y columnas fijos, lo obtenga directamente en el evento Oncellclick dando click con el mouse y de esa manera pueda traerme ya sea el valor o la posición por lo menos del campo, para seguir
avanzando, espero haberme podido explicar bien. Muchas gracias a quién pueda por lo menos orientarme, saludos a todos.

Ejemplo de codigo de ECFISA...

Código Delphi [-]

TDBGridExt = class(TDBGrid);               //para detectar valores en celdas navigator.


 private
    { Private declarations }
  function DBgridColFil(ACol,AFil: integer; GE: TDBGridExt): string;   


//----------------------------------------------------------------------------//
//---FUNCIÓN PARA CAPTURAR LA POSICIÓN EN LA QUE SE HACE CLIC DE UNA CELDA----//
//----------------------------------------------------------------------------//


function TForm3.DBgridColFil(ACol, AFil: integer; GE: TDBGridExt): string;
begin
  Result:= '';
  GE.DataSource.DataSet.MoveBy(1 - GE.Row); //  DataSet en fila 1 del DBGrid
  // Verifocar validez de ACol y AFil
  if (AFil > 0)and(ACol > 0)and(AFil < GE.RowCount)and(ACol < GE.ColCount) then
  begin
    GE.DataSource.DataSet.MoveBy(Afil-1); // Posicionarse en  AFil
    GE.Refresh;
    GE.FocusCell(ACol,AFil,True);         // Foco en la celda
    GE.SetFocus;
    Result:= GE.SelectedField.AsString;
    Edit1.text:= Result;
  end
  else
    raise Exception.Create('Selección fuera de rango');
end;

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//


procedure TForm3.Button1Click(Sender: TObject);
begin
 Caption:= DBGridColFil(StrToInt(Edit1.Text),StrToInt(Edit2.Text), TDBGridExt(DBGrid1));
end;
Responder Con Cita
  #2  
Antiguo 11-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 principiodual.

Me corregirás si me equivoco...

Lo que entendí es que deseas obtener el valor de la celda en que estas posicionado, ya sea cuando haces click con el mouse o cuando te desplazas con el teclado. Si ese es el caso, reescribiéndo el método UpdateActions del form lo vas a poder resolver de modo simple y eficiente:
Código Delphi [-]
type
  TForm1 = class(TForm)
    ...
    DBGrid1: TDBGrid;
    Label1: TLabel;
  private
   
  protected
    procedure UpdateActions; override;
  ...

implementation

procedure TForm1.UpdateActions;
begin
  inherited;
  Label1.Caption:= DBGrid1.SelectedField.AsString;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 11-10-2014
edgargh edgargh is offline
Miembro
 
Registrado: jun 2006
Ubicación: León, Guanajuato
Posts: 25
Poder: 0
edgargh Va por buen camino
Hola, no estoy muy convencido de lo que quieres, pero si solo requieres obtener el valor de la celda donde hagas clic basta con este simple código:

Código Delphi [-]
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
 Edit1.Text:=Column.Field.Value;
end;

En el ejemplo que pongo al hacer clic en una celda del DBGrid1, el valor de la celda se muestra en Edit1 sin importar de que tipo sea el dato.

Saludos, espero que esto se aproxime a lo que buscas.
Responder Con Cita
  #4  
Antiguo 13-10-2014
principiodual principiodual is offline
Miembro
NULL
 
Registrado: ago 2014
Posts: 26
Poder: 0
principiodual Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola principiodual.

Me corregirás si me equivoco...

Lo que entendí es que deseas obtener el valor de la celda en que estas posicionado, ya sea cuando haces click con el mouse o cuando te desplazas con el teclado. Si ese es el caso, reescribiéndo el método UpdateActions del form lo vas a poder resolver de modo simple y eficiente:
Código Delphi [-]
Código Delphi [-]
type   TForm1 = class(TForm)     ...     DBGrid1: TDBGrid;     
Label1: TLabel;   private       
protected     procedure UpdateActions; override;   ... 
 implementation  
procedure TForm1.UpdateActions; 
begin   inherited;  
 Label1.Caption:= DBGrid1.SelectedField.AsString;
 end;


Saludos
Muchas gracias por ayudarme, este sitio es increible, siempre recibes ayuda y documentación interesante, por ahora no puedo ponerme a programar, porque estoy enfermo, pero apenas pueda verificaré el método a ver que tal me va y les comento. Muchas gracias.

Última edición por principiodual fecha: 13-10-2014 a las 23:38:17.
Responder Con Cita
  #5  
Antiguo 13-10-2014
principiodual principiodual is offline
Miembro
NULL
 
Registrado: ago 2014
Posts: 26
Poder: 0
principiodual Va por buen camino
Cita:
Hola, no estoy muy convencido de lo que quieres, pero si solo requieres obtener el valor de la celda donde hagas clic basta con este simple código:

Código Delphi [-]
Código Delphi [-]

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
 Edit1.Text:=Column.Field.Value;
end;

En el ejemplo que pongo al hacer clic en una celda del DBGrid1, el valor de la celda se muestra en Edit1 sin importar de que tipo sea el dato.

Saludos, espero que esto se aproxime a lo que buscas.

Muchas gracias amigo, era parte de la solución que buscaba por si no podia obtener directamente el valor de la celda que seleccione en el DBGRID. Apenas pueda pruebo y les comento. Saludos

Última edición por principiodual fecha: 13-10-2014 a las 23:41:03.
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
Capturar Dato En Celda Del Dbgrid sandra mendoza Varios 15 10-10-2014 22:05:31
Obtener el valor de la celda de un DBGrid GerTorresM Varios 1 25-11-2010 17:19:24
Codigo para ingresar un dato a una celda de un DBGRID Memphis Conexión con bases de datos 2 25-01-2005 02:11:46
Como saber el Dato Capturado en Celda de un dbGrid. AGAG4 Varios 3 21-01-2005 23:11:44
Obtener el valor de una celda de dbgrid gescoto99 OOP 3 31-03-2004 22:47:16


La franja horaria es GMT +2. Ahora son las 07:16:35.


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