DBGrid
Como posso criar opção para Classificar e ocultar uma coluna no DBGrid?
Como acontece no access, você clica no nome da coluna com o botão direito e aparece opção Classificar A/Z ou Z/A, Ocultar coluna...
Uso ADOQuery banco Access.
Paulo Andrade
Curtidas 0
Respostas
Gustavo Bretas
21/10/2011
Paulo, se vc usar somente o componente ADOQuery, vc ter que refazer o Select toda vez que precisar ordenar a Grid.
Então vc pode acrescentar um ClientDataSet e usar a propriedade IndexNamem, como no exemplo abaixo:
Talvez não seja o melhor exemplo, mas funciona perfeitamente aqui pra mim!
Att
Então vc pode acrescentar um ClientDataSet e usar a propriedade IndexNamem, como no exemplo abaixo:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
vlbMesmoCampo: Boolean;
vloIndices: TStrings;
vliCont: Integer;
begin
inherited;
try
vlbMesmoCampo := False;
vloIndices := TStringList.Create;
ClientDataSet1.GetIndexNames(vloIndices);
ClientDataSet1.IndexName := EmptyStr;
vliCont := vloIndices.IndexOf(idx + Column.FieldName);
if vliCont >= 0 then
begin
vlbMesmoCampo := not (ixDescending in ClientDataSet1.IndexDefs[vliCont].Options);
ClientDataSet1.DeleteIndex(idx + Column.FieldName);
end;
ClientDataSet1.AddIndex(idx + Column.FieldName, Column.FieldName, [], IfThen(vlbMesmoCampo, Column.FieldName));
ClientDataSet1.IndexName := idx + Column.FieldName;
finally
FreeAnNil(vloIndices);
end;
end;Talvez não seja o melhor exemplo, mas funciona perfeitamente aqui pra mim!
Att
GOSTEI 0
Paulo Andrade
21/10/2011
Como poderia usar ClientDataSet com componentes ADO banco Access?
Paulo, se vc usar somente o componente ADOQuery, vc ter que refazer o Select toda vez que precisar ordenar a Grid.
Então vc pode acrescentar um ClientDataSet e usar a propriedade IndexNamem, como no exemplo abaixo:
Talvez não seja o melhor exemplo, mas funciona perfeitamente aqui pra mim!
Att
Então vc pode acrescentar um ClientDataSet e usar a propriedade IndexNamem, como no exemplo abaixo:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
vlbMesmoCampo: Boolean;
vloIndices: TStrings;
vliCont: Integer;
begin
inherited;
try
vlbMesmoCampo := False;
vloIndices := TStringList.Create;
ClientDataSet1.GetIndexNames(vloIndices);
ClientDataSet1.IndexName := EmptyStr;
vliCont := vloIndices.IndexOf(idx + Column.FieldName);
if vliCont >= 0 then
begin
vlbMesmoCampo := not (ixDescending in ClientDataSet1.IndexDefs[vliCont].Options);
ClientDataSet1.DeleteIndex(idx + Column.FieldName);
end;
ClientDataSet1.AddIndex(idx + Column.FieldName, Column.FieldName, [], IfThen(vlbMesmoCampo, Column.FieldName));
ClientDataSet1.IndexName := idx + Column.FieldName;
finally
FreeAnNil(vloIndices);
end;
end;Talvez não seja o melhor exemplo, mas funciona perfeitamente aqui pra mim!
Att
GOSTEI 0
Gustavo Bretas
21/10/2011
Como poderia usar ClientDataSet com componentes ADO banco Access?
Paulo, como em qualquer outro Banco, informe a ADOQuery para o DataSetProvider, e o DataSetProvider para o ClientDataSet, depois trabalhe direto no ClientDataSet, se o select tiver parâmetros, clique com o botão direito do mouse no ClientDataSet e selecione Fetch Params, ele vai copiar todos os parâmetros da Query, então ao invés de setar os parâmetros e abrir a Query vc seta os parâmetros no ClientDataSet e abre por ele!
Att
GOSTEI 0
Paulo Andrade
21/10/2011
#Concluido
Valeu a dica amigão, funcionou perfeitamente... obrigado!
Paulo, como em qualquer outro Banco, informe a ADOQuery para o DataSetProvider, e o DataSetProvider para o ClientDataSet, depois trabalhe direto no ClientDataSet, se o select tiver parâmetros, clique com o botão direito do mouse no ClientDataSet e selecione Fetch Params, ele vai copiar todos os parâmetros da Query, então ao invés de setar os parâmetros e abrir a Query vc seta os parâmetros no ClientDataSet e abre por ele!
Att
Valeu a dica amigão, funcionou perfeitamente... obrigado!
Como poderia usar ClientDataSet com componentes ADO banco Access?
Paulo, como em qualquer outro Banco, informe a ADOQuery para o DataSetProvider, e o DataSetProvider para o ClientDataSet, depois trabalhe direto no ClientDataSet, se o select tiver parâmetros, clique com o botão direito do mouse no ClientDataSet e selecione Fetch Params, ele vai copiar todos os parâmetros da Query, então ao invés de setar os parâmetros e abrir a Query vc seta os parâmetros no ClientDataSet e abre por ele!
Att
GOSTEI 0