Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2008
Avatar de Jheysson13
Jheysson13 Jheysson13 is offline
Miembro
 
Registrado: abr 2006
Posts: 133
Poder: 19
Jheysson13 Va por buen camino
Ordenar un dbgrid en acendente y decendente.

hola.
me pregunto como puedo crear un Boton 'ordenar', para un bdgrid que cuando seleccione una celda pueda ordenar en descendente y/o decendente el dbgrid con respecto a ese campo, espero ser claro.

utilizo un ztable, firebird.

nota:esto puedo hacerlo con el componente zquery pero en este caso me gustaria un ztable.

gracias de antemano
__________________
El fin Justifica los medios. Lo Importate es llegar
Responder Con Cita
  #2  
Antiguo 01-07-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, puedes utilizar los filtros del dataset para ordenar los datos en el DBGrid, o tambien puedes usar el truco 458 en la sección de trucos.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 01-07-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Jheysson13, puedes utilizar el evento OnTittleClick del DbGrid y la propiedad Sort de tu DataSet, un ejemplo con los componentes Ado.

Código Delphi [-]
 Orden : String;
.....
.....
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
 Campo : String;
begin
 Campo := Column.FieldName; //Obtenemos el nombre del campo
 if Orden='DESC' then
  begin
   AdoTable1.Sort := Campo+' '+Orden; //Ordenamos por el campo que ha hecho click en orden desendente
   Orden := 'ASC';
  end
 else
  begin
   AdoTable1.Sort := Campo+' '+Orden;
   Orden := 'DESC';
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 Orden := 'ASC'; //Inicializamos orden
end;

El ZTable creo que tiene una propiedad SortedField, entonces Sort cambias por SortedField.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 01-07-2008
Avatar de Jheysson13
Jheysson13 Jheysson13 is offline
Miembro
 
Registrado: abr 2006
Posts: 133
Poder: 19
Jheysson13 Va por buen camino
saludo de nuevo

solo queria decir que he provado los dos codigos y me funcionaron los dos.

salvo que ambos me daban el mismo problema tanto el del truco 458, como el que me detallo caro.

es que al momento de clickear por primera vez sobre la columna me ordena los campos de la manera inversa al orden, pero si clickeo otra vez no lo hace, a menos que clickee sobre otro campo y asi sucesivamente.

otra cosa es que cuando doy un refresh a la ztable no me deja el orden defaul, sino que lo deja invertido siempre..

como puedo solucionar esto.. gracias de nuevo.
__________________
El fin Justifica los medios. Lo Importate es llegar
Responder Con Cita
  #5  
Antiguo 01-07-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, en el truco prueba cambiando estas lineas:

Código Delphi [-]
if DBGrid1.DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  begin    
     if PreviousColumnIndex > -1 then 
        begin
         DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
         DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
        end
    Column.title.Font.Style := 
    Column.title.Font.Style + [fsBold];
    PreviousColumnIndex := Column.Index;

if Column.Field <> nil then
 if (Pos(Column.Field.FieldName, Sort) = 1)
    and (Pos(' DESC', Sort)= 0) then
      Sort := Column.Field.FieldName + ' DESC'
    else
      Sort := Column.Field.FieldName + ' ASC';
  end;
end;

ojo lo hice al vuelo, puede que no funcione.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 01-07-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Jheison, a mi me funciona bien haciendo click en la misma columna primero me ordena en ascendente y si clikeo otra vez en la misma en desendente, porque en el codigo que te puse esta así, una vez que ha ordenado en ASC cambia el orden a DESC y viceversa, la variable Orden tiene que ser una variable global en tu unidad.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #7  
Antiguo 01-07-2008
Avatar de Jheysson13
Jheysson13 Jheysson13 is offline
Miembro
 
Registrado: abr 2006
Posts: 133
Poder: 19
Jheysson13 Va por buen camino
enecumene cuando hice el codigo me fije en los detalles de esas lineas que se encontraban en el tema y los cambie tabien, pero me sigue igual, sin mencionar que estoy trabajando con ztable y no adotable lo k hace que tenga que adaptarlo mas. gracias de todos modos.

caro la variable Orden la declare de manera global como dices pero no se que es lo que pasa, supongo que sera por el componente que estoy usando, ya que es mucha coincidencia que ambos trucos tengan el mismo problema..

de todas formas gracias por la informacion, y su ayuda. vere que puedo hacer.

salu2
__________________
El fin Justifica los medios. Lo Importate es llegar
Responder Con Cita
  #8  
Antiguo 02-07-2008
cjmatador cjmatador is offline
Miembro
 
Registrado: ene 2008
Ubicación: La Paz Bolivia
Posts: 24
Poder: 0
cjmatador Va por buen camino
utiliza un query en vez del dbtable que es mucho mas facil y puedes resolver mas facilmente el problema
en el sql pones

select * from tabla order by campo desc
select * from tabla order by campo asc

creo que es asi
saludos
Responder Con Cita
  #9  
Antiguo 02-07-2008
Avatar de Jheysson13
Jheysson13 Jheysson13 is offline
Miembro
 
Registrado: abr 2006
Posts: 133
Poder: 19
Jheysson13 Va por buen camino
tienes razon es mas facil, pero como dije en un principio ya tengo el proyecto muy avanzado para cambiar el ztable por zquery, entiendes mi punto.

de haber sabido que tendria este incombeniente ubiese elejido el query desde el principio..

salu2
__________________
El fin Justifica los medios. Lo Importate es llegar
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ordenar DBGrid por columnas Palmiro Conexión con bases de datos 6 25-03-2016 18:35:17
Ordenar registros de dbgrid de forma acendente o decendente thelibmx Varios 2 08-11-2007 19:11:46
Ordenar datos en un DBGrid jona-182 Conexión con bases de datos 3 30-03-2007 21:43:06
ordenar datos del DBGrid! kage_01 Tablas planas 1 02-07-2005 03:42:28
Ordenar dbgrid jzk OOP 4 17-12-2004 13:45:45


La franja horaria es GMT +2. Ahora son las 23:43:39.


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
Copyright 1996-2007 Club Delphi