Ordenar registros no grid clicando sobre a barra de título.
24/07/2006
0
Estou usando DBExpress:
SQLDataSet + DataSetProvider + ClientDataSet para acessar o BD (Firebird atualmente).
O que eu queria fazer é o seguinte: ao clicar sobre a barra de título, fazer com que a ordem dos registros fosse alterada. Quando usava IBX conseguia fazer, não se se da melhor forma mas funcionava.... eu editava o SQL e mandava abrir novamente... mas não estou conseguindo fazer isso com esse trio q estou usando...
Uso DataModules com todos os trios de componente e uso um template com o meu form base para dados, onde tenho apenas um dataset ligado ao grid.
Se alguém puder dar uma dica... agradeço.
[]´s
Techsoft
Post mais votado
22/02/2018
with NomedaQuery do
begin
if IndexFieldNames = Column.FieldName + ':D' then
IndexFieldNames := Column.FieldName + ':A' // ascendente
else
IndexFieldNames := Column.FieldName + ':D'; // descendente
end;
Irineu Junior
Mais Posts
24/07/2006
Marcelo_mileris
ClientDataSet1.IndexFieldNames := Column.FieldName;
25/07/2006
Techsoft
Era isso mesmo que eu estava precisando.
[]´s
27/07/2006
Techsoft
27/07/2006
Fabiano Góes
grato !!!!
Fabiano Góes.
27/07/2006
Fabiano Góes
grato !!!!
Fabiano Góes.
27/07/2006
Techsoft
eu criava uma constante com o meu SQL. e quando clicava sobre o barra de título do grid executava o seguinte:
with IBQUERY1 do begin Close; SQL.Clear; SQL.Add(SQLD); //SQLD ONDE ESTÁ MEU SQL PADRÃO SQL.Add(´ORDER BY ´+Column.FieldName); Open; end;
Column eh um parâmetro do evento TitleClick do DBGrid e nele eu tenho o FieldName que está na coluna q estou clicando.
Se for usar o wwDBGrid da InfoPower por exemplo... ai substitui o Column.FieldName por AFieldName ou algo assim... não lembro exatamente,..... Funciona, não sei se é a melhor maneira...
27/07/2006
Techsoft
eu criava uma constante com o meu SQL. e quando clicava sobre o barra de título do grid executava o seguinte:
with IBQUERY1 do begin Close; SQL.Clear; SQL.Add(SQLD); //SQLD ONDE ESTÁ MEU SQL PADRÃO SQL.Add(´ORDER BY ´+Column.FieldName); Open; end;
Column eh um parâmetro do evento TitleClick do DBGrid e nele eu tenho o FieldName que está na coluna q estou clicando.
Se for usar o wwDBGrid da InfoPower por exemplo... ai substitui o Column.FieldName por AFieldName ou algo assim... não lembro exatamente,..... Funciona, não sei se é a melhor maneira...
28/07/2006
Micheus
procedure TForm1.FormShow(Sender :TObject); begin // força a inicialização pelo campo da primeira coluna DBGrid1TitleClick(DBGrid1.Columns[0]); end; ... procedure TForm1.DBGrid1TitleClick(Column: TColumn); var Idx :Integer; begin // Alteração da query ordenando pelo campo "clicado" with DBGrid.DataSource.DataSet as TIBQuery do begin; Idx := Pos(´ORDER BY ´, UpperCase(SQL.Text)); if Idx > 0 then begin SQL.Text := Copy(SQL.Text, 1, IdX -1); SQL.Text := SQL.Text +´ORDER BY ´+Column.FieldName; end; Close; Open; end; // restaurando a cor do título DBGrid1.Columns[DBGrid1.Tag].Title.Color := clBtnFace; DBGrid1.Columns[DBGrid1.Tag].Title.Font.Color := clWindowText; DBGrid1.Columns[DBGrid1.Tag].Title.Font.Style := []; // guarda a coluna selecionada DBGrid.Tag := Column.Index; // alterando a cor do título do campo ordenado DBGrid1.Columns[DBGrid1.Tag].Title.Color := $00BE7C7C; DBGrid1.Columns[DBGrid1.Tag].Title.Font.Color := clWhite; DBGrid1.Columns[DBGrid1.Tag].Title.Font.Style := [fsBold]; end;
22/08/2006
Cyber
Usando AdoQuery
procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin if (DM.ADOQuery1.Sort<>column.FieldName+´ ASC´) then DM.ADOQuery1.Sort:=column.FieldName+´ ASC´ else DM.ADOQuery1.sort:=column.fieldname+´ DESC´; end;
Caso funcione diga ai para o pessoal!
09/11/2007
Isoares
Estou iniciando em programação. Utilizo Delphi 2005. Conexão a BD com IBX.
Gostaria de saber se há uma maneira de atualizar na tela (apenas atualizar e não editar, incluir ou excluir) os registros num dataset cujos dados são apresentados em DBEdit´s e tambem se é possível fazer isso num DBGrid, ambos SEM executar as operações Close/Open, uma vez que salvo engano, isso gera transito desnecessário na rede.
Os componentes atualmente utilizados são:
DataModule com IBDataBase, ligado a InterBase 1.0 e IBTransaction ligado ao IBDataBase.
No form, utilizo: IBDataSet ligado ao IBDataBase e ao IBTansaction;
DataSource, ligado ao IBDataSet.
Já li a respeito do ClientDataSet, mas ainda nao me sinto preparado o suficiente para utilizá-lo. Tenho que ler mais a respeito. Portanto, caso alguém possa me ajudar, com os componentes atuais, agradeço.
09/11/2007
Pestana_
with IBQUERY1 do begin Close; SQL.Clear; SQL.Add(SQLD); //SQLD ONDE ESTÁ MEU SQL PADRÃO SQL.Add(´ORDER BY ´+Column.FieldName); Open; end;
Ola techsoft, atualmente estou fazendo a mesma coisa do que você, eu ainda não descobri como ordenar utilizando indeces como da pra fazer com ClientDataSet, na verdade a minha opnião não tem como ordenar por indeces no [b:4c62f8c894]IBquery[/b:4c62f8c894].
A unica coisa que tem que fazer é passar por todo este transtorno de montar a query novamente ordenado pelo o campo selecionado no dbgrid e depois executar a query, acho desnecessariamente isso, mas como já havia falado não tem como ordenar por indeces no IBquery.
Pestana.
17/05/2014
Getulio Torres
Eu uso o IBQuery (QProd) Ligado no DM.IBDataBase, e o DBGRID ligado ao DSProd (DataSource), e DSProd(datasource) esta ligado ao QProd(IBQuery)
uso o banco de dados Firebird 2.1, alguem pode me ajudar? Grato....
12/01/2017
Vivaldo Junior
procedure TFrmClientes.DBGrid1TitleClick(Column: TColumn);
begin
with Query1 do begin
if SortType = stAscending then
SortType := stDescending
else
IndexFieldNames := Column.FieldName;
First;
end;
end;
01/08/2018
Tássio Gois
with NomedaQuery do
begin
if IndexFieldNames = Column.FieldName + ':D' then
IndexFieldNames := Column.FieldName + ':A' // ascendente
else
IndexFieldNames := Column.FieldName + ':D'; // descendente
end;
Muito Bom!
Me ajudou bastante. Foi o código mais limpo que encontrei.
Clique aqui para fazer login e interagir na Comunidade :)