index da coluna dbgrid default
Ola em minha aplicao, tem a posibilidade do usuario cliclar o no titulo da coluna e arrastalo invertento as posicoes das colunas, gostaria de saber se tem alguma funcao do proprio dbgrid onde ele retorna as posiçoes originais no grid, desde ja agradeço.
Digaopachesen
Curtidas 0
Respostas
Marco Salles
13/09/2008
Ola em minha aplicao, tem a posibilidade do usuario cliclar o no titulo da coluna e arrastalo invertento as posicoes das colunas,
isto ja é default .. Nãp precisa de nenhuma codificação extra
gostaria de saber se tem alguma funcao do proprio dbgrid onde ele retorna as posiçoes originais no grid, desde ja agradeço
Pode criar.. Mas acho que fechar e Abri o DataSet ja Resolve
GOSTEI 0
Digaopachesen
13/09/2008
Marcos nao funcionou, bom minha intecao era o seguinte q simplesmente tivese uma funcao do dbgrid q simplismente ele reoganizace as coluna como default, fechando e abrindo o dataset nao funcionau como vc comentou. se caso exista uma outra posibilidade estarei ai para testa as dicas enviadas. VLW T+.
GOSTEI 0
Marco Salles
13/09/2008
Marcos nao funcionou
humm .. Sei . Deve ser pq voce tem os Tfields definidos , criados em Designed
Porém voce pode tentar a função abaixo , que pode ser adicionada ao
evento Onclick do Grid . <Este evento não existe mas pode ser Adicionado>
var i:integer; begin for i:=0 To SeuDataSet.FieldCount-1 do SeuDataSet.Fields[i].Index:=SeuDataSet.Fields[i].FieldNo-1;
GOSTEI 0
Diegotiemann
13/09/2008
Quando tenho uma DbGrid ligada um tclientDataSet através de um dataSource uso o seguinte comando
meuClientDataSet.IndexName:=´DEFAUL_ORDER´;
Mas pelo que me parece não é bem o que você prescisa.
meuClientDataSet.IndexName:=´DEFAUL_ORDER´;
Mas pelo que me parece não é bem o que você prescisa.
GOSTEI 0
Digaopachesen
13/09/2008
Marcos salles, utilizei tua rotina com um wwdbgrid e deu resultado, mas se eu mudar a possicção de varias coluna tenho q executala mais de uma vez para obter o resultado desejado, vou realizar mais alguns teste para ver o pq disso, vlw pela ajuda,
ja a função a baixo
meuClientDataSet.IndexName:=´DEFAUL_ORDER´;
não utilizei pq nao estou utilizando clientDataSet, mas valeu pela dica...
ja a função a baixo
meuClientDataSet.IndexName:=´DEFAUL_ORDER´;
não utilizei pq nao estou utilizando clientDataSet, mas valeu pela dica...
GOSTEI 0
Fernando
13/09/2008
eu uso o ClientDataSet e funciona normal
segue a função
eu uso o TwwDBGrid do infopower
mas pode usar com qualquer um grid
var
IndexDef : TIndexDef;
IntIndex : integer;
strName : String;
blnDescending : boolean;
begin
blnDescending := False;
strName := ´TEMP´+AFieldName;
intIndex := ClientDataSet.IndexDefs.IndexOf(strName);
If ClientDataSet.IndexName = strName then
begin
// ativa indice
IndexDef := ClientDataSet.IndexDefs.Find(strName);
blnDescending := indexDef.DescFields = ´´;
end;
If IntIndex >= 0 then
begin
//deleta indice
ClientDataSet.DeleteIndex(strName);
ClientDataSet.IndexDefs.Delete(intIndex);
end;
IndexDef := ClientDataSet.IndexDefs.AddIndexDef;
IndexDef.Name := strName;
IndexDef.Fields := AFieldName;
If blnDescending then
IndexDef.DescFields := AFieldName;
ClientDataSet.IndexName := strName;
segue a função
eu uso o TwwDBGrid do infopower
mas pode usar com qualquer um grid
var
IndexDef : TIndexDef;
IntIndex : integer;
strName : String;
blnDescending : boolean;
begin
blnDescending := False;
strName := ´TEMP´+AFieldName;
intIndex := ClientDataSet.IndexDefs.IndexOf(strName);
If ClientDataSet.IndexName = strName then
begin
// ativa indice
IndexDef := ClientDataSet.IndexDefs.Find(strName);
blnDescending := indexDef.DescFields = ´´;
end;
If IntIndex >= 0 then
begin
//deleta indice
ClientDataSet.DeleteIndex(strName);
ClientDataSet.IndexDefs.Delete(intIndex);
end;
IndexDef := ClientDataSet.IndexDefs.AddIndexDef;
IndexDef.Name := strName;
IndexDef.Fields := AFieldName;
If blnDescending then
IndexDef.DescFields := AFieldName;
ClientDataSet.IndexName := strName;
GOSTEI 0
Marco Salles
13/09/2008
Marcos salles, utilizei tua rotina com um wwdbgrid e deu resultado, mas se eu mudar a possicção de varias coluna tenho q executala mais de uma vez para obter o resultado desejado, vou realizar mais alguns teste para ver o pq disso, vlw pela ajuda,
Tb não entendo... :?: :?:
Pq ao Mudar as colunas de Lugar independentemente
da quantidade de vezes o Valor da Propriedade FieldNo fica inalterado.
O que altera é o valor de Index
Mas poste mais resultados de usa experiência..
GOSTEI 0
Digaopachesen
13/09/2008
Marcos resolvio utilizando tua rotina com mais alguns detalhes ai funcionou como eu desejava...
um exemplo é o seguinte, vc tem um grid com 10 colunas, ai vc cola a coluna 1 na posição 5 a 3 na posicao 9 e a 4 na posicao 1. eu queria reordenalas como elas estavam da coluna 1 a 10, com a tua retoni ela nao os ordenava como default, agora sim, caso eu tenha feito algo de errado ou alguma bobage porfavor me corriga...vlw pela dica T+
var i, f:integer; begin inherited; for i:=0 To DBGrid1.FieldCount-1 do begin f:= i; while f <= DBGrid1.FieldCount-1 do begin if i = DBGrid1.Fields[f].FieldNo-1 then DBGrid1.Fields[f].Index:=DBGrid1.Fields[f].FieldNo-1; f:= f + 1; end; end;
um exemplo é o seguinte, vc tem um grid com 10 colunas, ai vc cola a coluna 1 na posição 5 a 3 na posicao 9 e a 4 na posicao 1. eu queria reordenalas como elas estavam da coluna 1 a 10, com a tua retoni ela nao os ordenava como default, agora sim, caso eu tenha feito algo de errado ou alguma bobage porfavor me corriga...vlw pela dica T+
GOSTEI 0