PDA

Ver la Versión Completa : Ordenar Grid + Tibquery


mantraxer21
15-09-2010, 03:44:01
Estimados:

tengo una Grid (JvDBUltimGrid) con un TibQuery+ su Source, funcionando muy bien , exportable a excel, etc... el tema es que necesito que el cliente pueda ordenar "ciertas" columnas de la Grilla de Forma Asecendente, he visto unas cosas por ahi, pero me da errores...

Ejemplo.

Evento OnTitleClick


var
iX : integer;
sOrden : string;
begin
//orden según columna pinchada 0 = Codigo Cliente, 2= Cliente, 5= Comunas
Case Column.Index Of
0 : sOrden := 'IDCLIENTE';
1 : sOrden := 'CLIENTE';
2 : sOrden := 'IDCOMUNA';
//
end;
qClientes.Close;
qClientes.SQL.Text := 'Select * from clientes order by '+sOrden;
qClientes.Open;
for iX := 0 to 2 do
if Column.Index <> iX then
GrillaClientes.Columns.Items[iX].Color := clWhite
else
Column.Color := clCream;

end;


Nosé si me pueden echar una mano !

Gracias

ecfisa
15-09-2010, 05:03:59
Hola mantraxer.

Mirá, yo en algunos casos uso una función que saque, creo de about.com pero no estoy seguro ahora.
Le hice alguna modificación pero pienso que te va a servir, aprovecha el evento OnTitleClick del DBGrid
cambiando el sentido del órden a cada click.

Te lo documento lo mejor que puedo, si queda algo que no entiendas me decímelo:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+} // constantes se pueden modificar
const
PrevColInx: Integer = -1;
Orden: array[-1..0] of string=(' ASC',' DESC'); // sentido del ordenamiento
Valor: Integer = 0; //-1: ASC , 0: DESC
{$J-} // constantes no se pueden modificar
var
Inx: Integer;
begin
Inx:= Column.Index; // Guarda indice column. actual
Valor:= not Valor; // cambia sentido orden
// Restaurar fuente y color de titulo
if (PrevColInx > -1) then // si hubo cambio
with DBGrid1.Columns[PrevColInx] do
begin
Title.Font.Style:= Title.Font.Style - [fsBold];
Title.Color:= clBtnFace;
end;
// Hacer consulta
with IBQuery1 do
begin
Close;
SQL.Text:= 'SELECT * FROM CLIENTES ORDER BY '+
DBGrid1.Columns[Inx].FieldName + Orden[Valor];
Open;
end;
// Resaltar fuente y color de titulo
with DBGrid1.Columns[Inx] do
begin
Title.Font.Style:= Title.Font.Style + [fsBold];
Title.Color:= clLime;
DBGrid1.SelectedField:= DBGrid1.Columns[Inx].Field;
end;
PrevColInx:= Inx; // guardar indice actual
end;


Saludos. :)

mantraxer21
15-09-2010, 05:18:43
Hola, me da el siguiente error:

Cannot Sort. OnUserSort is not assigned

ecfisa
15-09-2010, 05:29:47
Hola de nuevo.

Así como está, funciona bién con TDBGrid, quizá haya que modificar algo con JvDBUltimGrid.
Supuse que no daria problemas... :(, lo siento.


Saludos.

ecfisa
15-09-2010, 05:42:19
Hola de nuevo.

Mirando un poco en google el mensaje que te dió encontré este LINK (http://koders.com/delphi/fid03535CA3AC1590ADE49766C7F39260D1778A8734.aspx?s=hook) del que pude extraer de un vistazo lo siguiente:

// Don't forget to set SortWith and assign OnIndexNotFound/OnUserSort if needed
y en una línea:
TSortWith = (swIndex, swFields, swUserFunc);


Revisá el link y fijate si ajustando SortWith y asignando OnIndexNotFound, no se soluciona el error.

Saludos.:)