Fórum DBGrid #408664
21/10/2011
0
Paulo Andrade
Curtir tópico
+ 0Posts
21/10/2011
Gustavo Bretas
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
25/10/2011
Paulo Andrade
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
26/10/2011
Gustavo Bretas
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
26/10/2011
Paulo Andrade
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)