Ver Mensaje Individual
  #1  
Antiguo 10-10-2014
principiodual principiodual is offline
Miembro
NULL
 
Registrado: ago 2014
Posts: 26
Reputación: 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