Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Columna en DBgrid (https://www.clubdelphi.com/foros/showthread.php?t=70397)

cmfab 18-10-2010 22:12:39

Columna en DBgrid
 
Hola a todos, tengo un DBGrid con 20 columnas que muestran diferentes campos de una tabla. lo que necesito es que cuando filtre algun valor del campo "descripcion" que es por ejemplo la columna # 18 la grilla se posicione en dicha columna con los valores filtrados. espero me haya explicado correctamente. desde ya mil gracias :confused:

rgstuamigo 18-10-2010 22:43:11

Si te estoy entendiendo bien :rolleyes: ,para poder cambiar el foco (Focus) de seleccion entre columna en un DbGrid podrías usar la propiedad SelectedIndex.;)
Por ejemplo:
Código Delphi [-]
DBGrid1.SelectedIndex:=0;//<- Hago que la primer columna tenga el foco
DBGrid1.SelectedIndex:=1;//<-Hago que la segunda columna tenga el foco
....etc.
Saludos...:)

cmfab 18-10-2010 22:47:38

Gracias por la pronta respuesta pero lo que tengo es el nombre del campo. como accedo al index ?

ecfisa 19-10-2010 01:11:35

Cita:

Empezado por cmfab (Mensaje 379645)
Gracias por la pronta respuesta pero lo que tengo es el nombre del campo. como accedo al index ?

Hola.

Una forma podría ser:
Código Delphi [-]
function GetIndex(Grid: TDBGrid; Nombre: string): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to Grid.FieldCount -1 do
    if Nombre = Grid.Fields[i].FieldName then
    begin
      Result:= i;
      Exit;
    end;
end;

Ejemplo de llamada:
Código Delphi [-]
...
var
  Inx: Integer;
begin
  Inx:= GetIndex2(DBGrid1,'nombre_del_campo');
  if Inx > -1 then  
  ...

Aunque en tu caso la verificación del if > -1, es innecesaria por que se supone que el nombre de campo lo obtenes de un DataSet...

Saludos.

rgstuamigo 19-10-2010 01:13:28

Pues no le veo el problema...;), tranquilamente se puede conseguir el indice por el nombre del campo(columna) de la siguiente manera:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var indice:Integer;
begin
indice:=DBGrid1.DataSource.DataSet.FieldByName('descripcion').Index;//<--Obtengo el indice de la columna
DBGrid1.SelectedIndex:=indice;// se lo asigno para que la seleccion pase a esa columna
DBGrid1.SetFocus;// me aseguro que el dbGrid tenga el foco
end;
Espero sea lo que buscas....;)
Saludos...:)

ecfisa 19-10-2010 01:20:26

Cita:

Empezado por rgstuamigo (Mensaje 379657)
Pues no le veo el problema...;), tranquilamente se puede conseguir el indice por el nombre del campo(columna) de la siguiente manera:

Mucho pero mucho mejor.

Lo buscaba en el DBGrid, sabía que por ahí andaba... pero no lo encontré. :)

Saludos.

rgstuamigo 19-10-2010 01:35:34

Cita:

Empezado por ecfisa (Mensaje 379658)
...
Lo buscaba en el DBGrid, sabía que por ahí andaba... pero no lo encontré.

No te preocupes que a mí me suele pasar muchas veces...:D, ademas creo que mi código anterior no está muy pulido, pues creo que debería tener una sentencia "IF" antes antes de la asignacion ala propiedad SelectedIndex del DBGrid.:rolleyes:. En todo caso la idea está planteada y por ahí va la cosa.;)
Saludos...:)

cloayza 19-10-2010 17:41:45

!!OJO amigos...!!

Existe una diferencia importante entre ambos trozos de codigo expuestos aqui.

Veamos a que me refiero

Vamos a suponer que mi dataset tiene los siguientes campos
Index -> 0 1 2
Dataset->Codigo, Descripcion, Valor

Y en la grilla yo defini los campos en este order
Index-> 0 1 2
Grid - >Codigo, Valor, Descripcion

Si yo quiero obtener el indice del campo Descripcion que esta en la grilla, cual seria el indice correcto?

Segun codigo de rgstuamigo seria 1
Segun codigo de ecfisa seria 2

El correcto seria 2. Salvo que el order de los campos en la grilla y en el dataset sea el mismo.

Saludos.


La franja horaria es GMT +2. Ahora son las 09:29:33.

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