PDA

Ver la Versión Completa : Columna en DBgrid


cmfab
18-10-2010, 22:12:39
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:
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
Gracias por la pronta respuesta pero lo que tengo es el nombre del campo. como accedo al index ?

Hola.

Una forma podría ser:

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:

...
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:
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
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
...
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.