PDA

Ver la Versión Completa : Ordenar un JvDBGrid


jafera
12-05-2011, 16:33:12
Buenas a todos.

Tengo un JvDBGrid en un form el cual quiero ordenar con un click en el título para lo cual uso el código siguiente:


procedure TF_BuscarCamio.DBGridBuscarTitleBtnClick(Sender: TObject;
ACol: Integer; Field: TField);
var c: string;
begin
c:=DBGridBuscar.SelectedField.FieldName;
OrdenarGrid.Close;
OrdenarGrid.SQL[1] := 'ORDER BY '+ c;
OrdenarGrid.Open;
DBGridBuscar.SetFocus;
end;


Funciona bien, hace el filtro solo DESC pero bueno, algo es algo.

El problema lo tengo en que no se como decirle que el campo activo es la columna donde hago click, y que c debe coger el valor de el título de esta columna, ya que por defecto me filtra por la columna 0 que es donde se situa el cursor al abrir la consulta.

He visto grids que aunque el cursor este situado en el primer registro de la primera columna, al hacer click en el título filtra igual.

Si paso el cursor a otra consulta pues ordena sin problema por esa nueva columna, pero seimpre, repito con algun campo de la columna donde hago el click seleccionado.

Algo se me escapa?

Gracias

Jafera

Caro
12-05-2011, 17:21:00
Hola jafera, no tengo el jvdbgrid, según lo que veo en tu codigo podrías hacer esta prueba:


procedure TF_BuscarCamio.DBGridBuscarTitleBtnClick(Sender: TObject;
ACol: Integer; Field: TField);
var c: string;
begin
c := Field.FieldName;
...................................
...................................


Saluditos

jafera
12-05-2011, 17:24:13
Gracias Caro.

Has dado en el clavo, esto es perfecto.

Ahora solo quedaria como hacer para que un click sea desc y con otro asc

Reipto, gracias

Jafera

luisgutierrezb
12-05-2011, 21:05:45
Bueno, no es el jvDBGrid pero las jedi traen el JvUltmGrid ya tiene todo hecho para las busquedas incluso hay un evento que se llama on sort, si usas ADO para la base de datos, solo basta con AdoDataset.Sort = 'Campo ASC'; y listo, con eso ordenas y en el evento del JvUltmGrid te manda el campo y si es ascendente o descendente

BlueSteel
12-05-2011, 23:35:33
Hola

yo he utilizado este procedimiento....


en el Evento OnTitleClick del JvDBGrid

pongo esto

If Column.Title.Caption='RUT' then
Begin
IBQ_Select.Close;
IBQ_Select.SQL.Clear;
If Sw_1 = 0 Then
Begin
IBQ_Select.SQL.Add('Select * from "Proveedor" Order By "Pro_Rut" ASC');
Sw_1 := 1;
End
Else
Begin
IBQ_Select.SQL.Add('Select * from "Proveedor" Order By "Pro_Rut" DESC');
Sw_1 := 0;
End;
IBQ_Select.Open;
End;

Bueno, esto lo hago por cada columna del DBGrid y me lo ordena ya sea ascendente o descendente...

Salu2:cool::rolleyes:

BlueSteel
12-05-2011, 23:40:10
Bueno, no es el jvDBGrid pero las jedi traen el JvUltmGrid ya tiene todo hecho para las busquedas incluso hay un evento que se llama on sort, si usas ADO para la base de datos, solo basta con AdoDataset.Sort = 'Campo ASC'; y listo, con eso ordenas y en el evento del JvUltmGrid te manda el campo y si es ascendente o descendente

Hola luisgutierrezb

estaba revisando esto, y podrias poner un ejemplo de esto, ya que no supe dar con esta característica...

Gracias y Salu2:cool::p

jafera
13-05-2011, 11:55:23
Hola luisgutierrezb

estaba revisando esto, y podrias poner un ejemplo de esto, ya que no supe dar con esta característica...

Gracias y Salu2:cool::p

Gracias por contestar.

Yo tampoco lo encontré

Saludos

radenf
13-05-2011, 12:55:14
Estimado jafera:

En este link coloqué el código que permite ordenar los grids.

http://www.clubdelphi.com/foros/showthread.php?t=73636

Espero que te sirva.
saludos

luisgutierrezb
16-05-2011, 20:48:04
Ahorita no tengo el Delphi a la mano, pero tiene una propiedad de sort, la activas, y en el evento de on sort del grid pones tu codigo, llegando a casa busco algun codigo de ejemplo...

jafera
17-05-2011, 15:52:25
Despues de unos dias de inactividad, pues me tengo que mudar de domicilio, ha decidido adaptar el codigo de BlueSteel y funciona de mil maravillas.

Hasta me hace ilusión ver que las cosas funcionan bien, es que los maestros sois unos cracks.

Gracias y saludos

Jafera

jafera
20-05-2011, 16:18:31
Olvide decir que en vez de colocar el código en cada título, uso una variable que me captura el nombre de la columna y con un solo código me sirve para cuantas columnas tenga en el Grid.


procedure TF_BuscarParc.DBGridBuscarTitleBtnClick(Sender: TObject;
ACol: Integer; Field: TField);
var
c: string;
begin
c:=Field.FieldName;
OrdenarGrid.Close;
OrdenarGrid.SQL.Clear;
if Sw_1 = 0 then
begin
OrdenarGrid.SQL.Add ('SELECT ID_PARC, CODI_PARC, NOM_PARC FROM BOM0003 ORDER BY '+ c + ' ASC');
Sw_1:=1;
end
else
if Sw_1 = 1 then
begin
OrdenarGrid.SQL.Add ('SELECT ID_PARC, CODI_PARC, NOM_PARC FROM BOM0003 ORDER BY '+ c + ' DESC');
Sw_1:=0;
end;
OrdenarGrid.Open;
DBGridBuscar.SetFocus;
end;


Saludos

pescriba
30-01-2013, 12:22:30
Si activamos dgTitleClick en Options y TitleArrow y TitleButtons se mostrará una bonita flecha hacia arriba o hacia abajo en la columna sobre la que hemos hecho clic.

Para averiguar si es hacia arriba o hacia abajo podemos ver la propiedad

SortMarker

que nos indica el estado (smUp, smNone o smDown)

y ahora ya podemos hacer algo como

' ORDER BY ' + Column.FieldName
if SortMarker = smUP + ' ASC'
else if SortMarker = smDown + ' DESC'