Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ordenar un JvDBGrid (https://www.clubdelphi.com/foros/showthread.php?t=73729)

jafera 12-05-2011 16:33:12

Ordenar un JvDBGrid
 
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:

Código Delphi [-]
 
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:

Código Delphi [-]
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

Código Delphi [-]
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

Cita:

Empezado por luisgutierrezb (Mensaje 399874)
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

Cita:

Empezado por BlueSteel (Mensaje 399891)
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.

Código Delphi [-]
 
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

Ordenar un JvDBGrid
 
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'


La franja horaria es GMT +2. Ahora son las 15:40:30.

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