Ordenar CxGrid em GridMode

30/12/2011

0

Olá pessoal.

Estou com o seguinte problema:
Tenho uma cxGrid que está com o GridMode ativo (TRUE) no DataController, pois preciso selecionar um ou mais registros da mesma. O problema é que perco a funcionalidade de ordenar através dos títulos da cxGrid.

Alguém sabe como resolver este problema?
Ou é só desabilitando (FALSE) o GridMode? Neste caso existe outra maneira de selecionar um ou mais registros na cxGrid para buscar as informações através GetSelectedBookmark?

Obrigado.
Marcelo Domingues

Marcelo Domingues

Responder

Post mais votado

17/10/2013

Boa tarde,
veja se isso "sana" teu problema.

Primeiramente declare essa variável no private da tua UNITE
Crescente: Boolean;

em seguida no oncolumnheaderclick da tua cxgrid coloque esse código.

var
  NomeCampo: string;
begin
  NomeCampo := TcxGridDBTableView(Sender).Columns[AColumn.Index].DataBinding.FieldName;

  if Crescente then
    Crescente := TcxGridTableView(Sender).Columns[AColumn.Index].SortOrder = soAscending
  else
    Crescente := TcxGridTableView(Sender).Columns[AColumn.Index].SortOrder = soDescending;

  Titulo(Crescente, NomeCampo, TClientDataSet(TcxGridDBTableView(Sender).DataController.DataSource.DataSet));
end;


Logo em seguida crie uma outra procedure chamada TItulo;

procedure Titulo(crescente: boolean; campo: string;
      Dataset: TClientDataSet);


De o CTRL + SHIFT + C e coloca esse código

begin
  if Dataset.IsEmpty then
    exit;

  if Dataset.IndexName <> '' then
    begin
      Dataset.DeleteIndex(Dataset.IndexName);
      Dataset.IndexName := '';
    end;

  if not (DataSet.FieldByName(campo).DataType in [ftBlob, ftMemo]) then
    begin
      if crescente then
        Dataset.AddIndex(campo, campo, [ixDescending], campo, '', 0)
      else
        Dataset.AddIndex(campo, campo, [], '', '', 0);

      Dataset.IndexName := campo;
    end;
  Dataset.First;
end;


Esperto que tenha te ajudado.


Att,
Thiago Irrazabal de Oliveira.

Thiago Irrazabal

Thiago Irrazabal
Responder

Mais Posts

14/10/2013

Graziani

Olá, estou com o mesmo problema, vc conseguiu resolver ???
Responder

15/10/2013

Marcelo Domingues

Não consegui.
O que tentei fazer e até deu certo foi no evento onHeaderClick das colunas chamar o SELECT para carregar a CxGrid e no ORDER BY fazer de acordo com cada coluna, mas não fica muito funcional na programação.
Então acabei deixando do jeito que estava sem ordenar.
Responder

17/10/2013

Thiago Irrazabal

Olá, estou com o mesmo problema, vc conseguiu resolver ???


Veja se soluciona o teu problema.



Att,
Thiago Irrazabal de Oliveira.
Responder

22/04/2019

Giorgeano

Bom dia...
Gostaria obter mas informações sobre como utilizar o seguinte procedimento:

procedure T_frmConsProdutos.OrderBy(Coluna : Integer);
begin

cxGrid1DBTableView1.GetColumnByFieldName('Item').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('Unidade').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('Descricao').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('Embalagem').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('PrcVenda').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('ICMS').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('Sld_N').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('Sld_F').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('IT_BX').SortOrder := soNone;
cxGrid1DBTableView1.GetColumnByFieldName('TIPO').SortOrder := soNone;

case Coluna of
1 : begin cxGrid1DBTableView1.GetColumnByFieldName('Item').SortOrder := soAscending; iPesquisa := 1; end;
2 : begin cxGrid1DBTableView1.GetColumnByFieldName('Unidade').SortOrder := soAscending; iPesquisa := 2;end;
3 : begin cxGrid1DBTableView1.GetColumnByFieldName('Descricao').SortOrder := soAscending; iPesquisa := 3;end;
4 : begin cxGrid1DBTableView1.GetColumnByFieldName('Embalagem').SortOrder := soAscending; iPesquisa := 4;end;
5 : begin cxGrid1DBTableView1.GetColumnByFieldName('PrcVenda').SortOrder := soAscending; iPesquisa := 5;end;
6 : begin cxGrid1DBTableView1.GetColumnByFieldName('ICMS').SortOrder := soAscending; iPesquisa := 6;end;
7 : begin cxGrid1DBTableView1.GetColumnByFieldName('Sld_N').SortOrder := soAscending; iPesquisa := 7;end;
8 : begin cxGrid1DBTableView1.GetColumnByFieldName('Sld_F').SortOrder := soAscending; iPesquisa := 8;end;
9 : begin cxGrid1DBTableView1.GetColumnByFieldName('IT_BX').SortOrder := soAscending; iPesquisa := 9;end;
10 : begin cxGrid1DBTableView1.GetColumnByFieldName('Tipo').SortOrder := soAscending; iPesquisa := 10;end;
end;


case iPesquisa of
1 : dxStatusBar1.Panels[1].Text :='Pesquisa por Código';
2 : dxStatusBar1.Panels[1].Text :='Pesquisa por Unidade de Medida';
3 : dxStatusBar1.Panels[1].Text :='Pesquisa por Descrição';
4 : dxStatusBar1.Panels[1].Text :='Pesquisa por Embalagem';
5 : dxStatusBar1.Panels[1].Text :='Pesquisa por Preço de Venda';
6 : dxStatusBar1.Panels[1].Text :='Pesquisa por ICMS';
7 : dxStatusBar1.Panels[1].Text :='Pesquisa por Saldo Fiscal';
8 : dxStatusBar1.Panels[1].Text :='Pesquisa por Saldo Real';
9 : dxStatusBar1.Panels[1].Text :='Pesquisa por Item Baixa';
10 : dxStatusBar1.Panels[1].Text :='Pesquisa por Tipo do Produto';
end;

end;
Responder

24/07/2022

Weberson Mendes

Conseguiu resolver o problema com o filtro com a cxGrid ?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar