Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Utilizando Objeto TcxGrid (https://www.clubdelphi.com/foros/showthread.php?t=72980)

gersonmaba 24-03-2011 00:13:22

Utilizando Objeto TcxGrid
 
Ola muchachos espero esta vez tener suerte y que alguien me pueda colaborar.

Estoy trabajando en Delphi 2010 y estoy utilizando un TcxGrid para mostrar unos datos, es muy bueno este componente, pero tengo una pregunta, como hago para saber los campos o las columnas con los que el usuario a ordenado la grilla para asi escribir una sentencia SQL.


Gracias

ecfisa 24-03-2011 02:05:40

Hola gersonmaba.

No conozco el componente, pero creo que este código para TDBGrid debería funcionarte igualmente.

Código Delphi [-]
function TForm1.GetColumnFieldNames(DBGr: TDBGrid): TStrings;
var
  i: Integer;
begin
  Result:= TStringList.Create;
  for i:= 0 to DBGr.Columns.Count - 1 do
    Result.Add(DBGr.Columns[i].FieldName);
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items:= GetColumnFieldNames(DBGrid1);
end;
Te devuelve los nombres de los campos en el orden impuesto en el Grid.

Claro está, que debes cambiar las referecias a TDBGrid por TcxGrid.

Un saludo.

Young 24-03-2011 03:23:41

Hola, no es precisamente la respuesta que buscas pero a partir de esto implementarás la solución. Las Columnas en el cxGrid tienen una propiedad llamada SortOrder como se muestra a continuación:

Código Delphi [-]
  grStudentsDBTableView1.DataController.ClearSorting(False);
  ColumnFamilyID.SortOrder := soAscending;
  ColumnFamilyPosition.SortOrder := soAscending;
  ColumnLastName.SortOrder := soAscending;
  ColumnFirstName.SortOrder := soAscending;

Lo que hace este código es eliminar el orden actual de la grilla y cambiar el orden en multiples columnas, por lo tanto para lo que tu necesitas solo tienes que consultar el valor de esta propiedad para cada columna de la grilla en cuestión.

Saludos.

Young 24-03-2011 03:44:23

Bueno, creo que he dado con la respuesta, pues me pareció haber tenido la misma duda hace algún tiempo y encontré este código en el centro de soporte de www.devexpress.com, que dicho sea de paso es de lo mejor que he visto.


Código Delphi [-]
uses cxGridDBDataDefinitions, ...;

begin
...
 Showmessage(TcxGridDBDataController(v.DataController).DataSource.DataSet.CommandText);
end;

En resumidas cuentas con este código logras obtener un string con la sentencia sql del DataController.

Hasta pronto.

gersonmaba 24-03-2011 16:05:13

Muchas Gracias a Cada uno de Uds....por la ayuda!

Tengo una pregunta mejor dicho 2 preguntas.

la primera de ellas. es que dice que con esyta linea. puedo ver el string.

Showmessage(TcxGridDBDataController(v.DataController).DataSource.DataSet.CommandText);
pero adaptandolo a lo que tengo

cxGrid1DBBandedTableView1.DataController.DataSource.DataSet.

pero despues del dataset no me sale la funcion que devuelve ese string...ni sql ni text nada...y e buscad y buscado y no encuentro.

y la otra pregunta..es
como consulto esa propiedad? pues por el tipo de dato no e sido capaz de pasarlo a un string ni nada..

ColumnLastName.SortOrder


Graciasssss.!

Young 25-03-2011 02:08:33

Cita:

Showmessage(TcxGridDBDataController(v.DataController).DataSource.DataSet.CommandText);
pero adaptandolo a lo que tengo

cxGrid1DBBandedTableView1.DataController.DataSource.DataSet.

pero despues del dataset no me sale la funcion que devuelve ese string...ni sql ni text nada...y e buscad y buscado y no encuentro.
Código Delphi [-]
TcxGridDBDataController(cxGrid1DBBandedTableView1.DataController).DataSource.DataSet.CommandText

Cita:

y la otra pregunta..es
como consulto esa propiedad? pues por el tipo de dato no e sido capaz de pasarlo a un string ni nada..

ColumnLastName.SortOrder
Código Delphi [-]
if ColumnLastName.SortOrder = soAscending then ....


La franja horaria es GMT +2. Ahora son las 16:44:12.

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