Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Capturar Dato En Celda Del Dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=61173)

sandra mendoza 28-10-2008 19:14:42

Capturar Dato En Celda Del Dbgrid
 
Buenas tardes.

Necesito que al dar doble click en una celda donde esta el codigo de un articulo, pueda capturar ese dato ya sea en un label o un edit, para poder hacer otro proceso con ese dato. ¿Es posible? ¿Que sentencia debo utilizar?

Muchas gracias

Caral 28-10-2008 19:18:44

Hola
El dbgrid solo muestra, lo que interesa es de donde saca esa infromacion.
La infromacion viene de un query o un table, ahi es donde hay que conseguir ese dato.
Ahora pregunto: Por que no un DBedit ?.
Saludos

sandra mendoza 28-10-2008 19:50:48

Pues mira, estoy haciendo un inventario que se refleja en el dbgrid que esta conectado a un query, la idea es q el usuario al dar doble click en la celda donde figura el articulo pueda ver mas detalles de este. El dbgrid tendra alguna propiedad en donde yo pueda copiar el dato que tenga escrito?

Caral 28-10-2008 20:10:10

Hola
Este hace exactamente lo que quieres.
Dale doble click al dbgrid y saldrá el dato que falta de la tabla, tanto en el edit como en el label, así te servirá de ejemplo.
Saludos

StartKill 28-10-2008 20:28:12

Saludos,

Perfecto, me lo arrancaste de los dedos Caral.

Mas deseo aportar lo que sigue:

Código Delphi [-]
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
   // aqui se usa el numero que corresponde al campo que se quiere mostrar
   // en edit
   //Edit1.Text:= ADOQuery1.Fields[2].AsString;
   // en label
   //Label3.Caption:= ADOQuery1.Fields[2].AsString;

 // la idea es que los nombres de campos esten en el editor de campos
  // de esa forma nos dirigimos directo al campo
  // y si por alguna razon se cambia el orden de los campos
  // estos nos siguan dando los valores correctos
   
   Edit1.Text:= ADOQuery1Otros,asString;
   Label3.Caption:= ADOQuery1Otros.AsString;

end;

Your friend

StartKill
Lima-Perú

Caral 28-10-2008 20:33:23

Hola
Buen aporte StartKill.
Para mi el problema de poner los campos en el editor es que nos forzamos a tener un query por consulta.
Yo suelo tener un query para varias consultas asi solo me dedico al sql olvidandome de que query es el que uso.
Aun asi me gusta que ampliaras el contenido, aprendemos mas todos.
Saludos

pablopessoa 29-10-2008 00:59:05

hola sandra mendoza, argentina? yo tb!!! saludos.

si bien ya han dado varias respuestas, queria hacer un aporte chiquito que capas tb te sirve. Yo muchas veces saco los datos del dbgrid( ya sea en los eventos OnClick u OnDoubleClick como tb cuando das la posibilidad de seleccionar una fila) de la siguiente forma :

Código Delphi [-]

label1.caption:=DBGrid1.DataSource.DataSet.FieldByName('nombreCampo').AsString;

Espero sirva mi aporte, saludos a todos!!

Caral 29-10-2008 01:23:01

Hola
Todos los aportes son buenos, aqui estamos para aprender unos de los otros.
Saludos

sandra mendoza 29-10-2008 17:51:03

Muchas gracias por todos sus aportes. Siempre me salvan!!!

JXJ 14-11-2010 07:17:27

tengo una duda con esto

label1.caption:=DBGrid1.DataSource.DataSet.FieldByName('nombreCampo').AsString;

en que evento del dbgrid coloco ese codigo

si yo quiero desplazarme en dentro del dbgrid usando
las teclas up down.
las teclas de las flechas Arriba y Abajo

me interesa que se muestre esa informacion segun
el campo. de la fila que tiene el foco.

no se a lo mejor un evento onrowfocus

onrowfocus
begin
label1.caption:=DBGrid1.DataSource.DataSet.FieldByName('nombreCampo').AsString;

end

ecfisa 15-11-2010 10:37:57

Hola JXJ.

La podrías poner en el evento OnDrawDataCell por ejemplo.
Código Delphi [-]
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  if gdSelected in State then
    Label1.Caption:= DBGrid1.DataSource.DataSet.FieldByName('NombreCampo').AsString;
end;

Ahora si tu intención como decis, es sólamente mostrar esa información, me parece más adecuado usar un TDBText.

Saludos. :)

principiodual 10-10-2014 16:38:08

Capturar valor dependiendo del mouse
 
Hola, he estado visitando varios temas, pero veo que este se acerca más a lo que busco pero salvo una diferencia que es la misma que siempre veo en este tipo de temas...

Yo necesito tomar el valor de no un campo previamente definido sino de cualquier campo donde haga clic, por ejemplo.

tengo una tabla con cuatro campos uno es CODMONEDA, FECHAINICIAL, FECHAFINAL, TASACAMBIO y si deseo colocar el mouse en la casilla de datos por ejemplo de FECHAFINAL me tome ese valor, y si después lo deseo poner en CODMONEDA me tome ese valor...

Es decir no me sirve como lo explican aquí ya que se basa siempe en tomar por ejemplo el mismo valor (CODMONEDA) pero de la fila donde se de el clic.
No se si me explico, si alguién me puede ayudar muchas gracias, sigo investigando mas acerca de los eventos de GRID. Saludos.

Casimiro Notevi 10-10-2014 16:58:43

Creo que es lo mismo que estás pidiendo, ¿por qué no te sirve?

principiodual 10-10-2014 17:19:18

por ejemplo este código...

Código Delphi [-]
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;   Field: TField; State: TGridDrawState);
 begin   if gdSelected in State then     
Label1.Caption:= DBGrid1.DataSource.DataSet.FieldByName('NombreCampo').AsString; 
end;

el va a tomar solo el valor del NombreCampo en la fila donde de clic, en mi caso no es un campo fijo, sino el mismo
campo sobre el que se de clic, es decir solo tomará el valor del dato NombreCampo si se le da click encima de ese campo.
por eso no me sirve me imagino debo trabajar con alguna propiedad que use el Field pero trabaje directamente con el
valor de la celda.

Código Delphi [-]
//THackDBGrid = class(TDBGrid) //refresh datagrid data - preserve row position

 var
 rowDelta: Integer; row: integer;
 recNo: integer; ds : TDataSet;
  begin ds := THackDBGrid(DBGrid1).DataSource.DataSet;
  rowDelta := -1 + THackDBGrid(DBGrid1).Row;
  row := ds.RecNo; ds.Refresh;
  with ds do begin DisableControls;
  RecNo := row; MoveBy(-rowDelta) ;
  MoveBy(rowDelta) ;
  EnableControls;

  ShowMessage(IntToStr(rowDelta));
  ShowMessage(IntToStr(row));
  ShowMessage(IntToStr(recNo));

Este código lo encontre en otra página, pero el chico lo usa para el caso de calcular posiciones, lo he
intentado llevar a lo que quiero pero no lo entiendo del todo lamentablemente.

principiodual 10-10-2014 21:38:06

Si alguién me pudiera ayudar, la unica forma que se me ocurre después de probar métodos y formas que no funcionan por lo menos para mi caso, tengo una idea de hacerlo y se que va a funcionar, pero necesitaría capturar la posición...

como puedo a través del posicionamiento o un clic en una celda del DBGRID capturar el número de columna, ya que no encuentro un método efectivo para obtener el valor de dicha celda, pienso que quizás sea mucho más fácil capturar el número de la columna en la que se hace clic y así por lo menos yo desarrollar mediante un if, que dato de los cuatro campos para mi tabla voy a traerme.

algo así como; doy clic aquí y obtengo el valor 4, entonces estoy dando clic en la columna de NATURALEZACUENTA que es el campo... y hago mis if...

if posición_campo = 4 then
valorcelda:=Form5.DBGRID1.Datasource.Dataset.Fieldbyname('NATURALEZACUENTA').aSsTRING
ELSE
if posición_campo = 3 then
valorcelda:=Form5.DBGRID1.Datasource.Dataset.Fieldbyname('FECHAFINAL').aSsTRING
ELSE
.... ETC, ETC.

Algo así, se que me funcionaría ya que no puedo obtener el valor directo dando clic en el campo que sea, solo me faltaría la sintaxis para uno poder obtener no el valor de la celda sino la posición de la misma...


espero haberme podido expicar bien y alguién me pueda ayuda, de todas maneras sigo investigando, muchas gracias.

Casimiro Notevi 10-10-2014 22:05:31

No olvides poner las etiquetas al código para que se vea correctamente, gracias

Lo mejor que puedes hacer es crear un hilo nuevo haciendo la pregunta lo más clara posible.
Así lo verán todos, ya que ten en cuenta ahora has contestado en un hilo existente desde hace años y nadie recibe mensajes de lo que has escrito, salvo los que participan en este hilo.

Y no olvides nuestra guía de estilo, gracias.


La franja horaria es GMT +2. Ahora son las 03:50:38.

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