Ir para conteúdo
Fórum Script Brasil
  • 0

Dbgrid


Guest - Andreia -

Pergunta

Guest - Andreia -

Bom dia

Gostaria de saber se tem como fazer no DBgrid o esquema de ordenar , clicando na descricao da coluna.

Tipo eu tenho um DBgrid com Nome e Endereço.

Ai se eu clicar na descricao Nome (primeira coluna)...ele ordena por nome....e de Clicar em Endereço, ele ordena por endereço..

Agradeço muito a ajuda

Abraços

Andreia

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Olá Andréia

Tente colocar o código a seguir no Evento OnTitleClick do DBGrid:

Var
  i:Integer;
begin
  Try
    for i:=0 to Column.Grid.FieldCount - 1 do
      begin
        GridExibicao.Columns.Items[i].Title.Font.Color:=ClBlack;//Cor da Fonte
        GridExibicao.COLUMNS.ITEMS[I].TITLE.FONT.STYLE := [];//Cot da Fonte
        GridExibicao.Columns.Items[i].Title.Color:=clBtnFace;//Cor do Fundo do Titulo Normal
        Column.Title.Color :=clSilver;//Cor do Fundo do Titulo Selecionado
        COLUMN.TITLE.FONT.STYLE := [FSBOLD];
        Column.Title.Font.Color:=ClBlue;
        Column.Font.color:=clTeal;
        Col:= GridExibicao.Columns[Column.Index].Index;
        GridExibicao.Columns.Items[i].Font.color:=ClBlack;
        (DataSourceGrid.DataSet as TClientDataSet).IndexFieldNames := Column.FieldName;
      end;
    Except
        ShowMessage('Não foi possível ordenar os valores');
    End;

Esse código ordena por ordem crescente e destaca a coluna selecionada...

Acho que isso vai te ajudar...

Att

Link para o comentário
Compartilhar em outros sites

  • 0

maikel O procedimento é este mesmo, mas observe que Andreia está utilizando Query, o que não vai permitir usar (não que eu saiba):

(DataSourceGrid.DataSet as TClientDataSet).IndexFieldNames := Column.FieldName;
A cláusula order by da query é que deverá ser ajusta para ordenar pelo campo selecionado.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Andreia -

Ola

Obrigada

Sou iniciante, e não consegui fazer essa linha que você mandou de exemplo

(DataSourceGrid.DataSet as TClientDataSet).IndexFieldNames := Column.FieldName;

eu estou usando Query,DataSource e IBDatabase.

Obrigada

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que seria algo assim:

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;

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Andreia -

Micheus, desculpe a ignorancia , masss

eu tenho essa IBQuery em um Datamodule, e fiz assim , mas não deu certo.

with DBGrid1.DataSource.DataSet as Datamodule2.IBQuery6 do

with DBGrid1.DataSource.DataSet as Datamodule2.TIBQuery do

poderia me dar uma luz?

Agradeço muito sua ajuda e paciencia

Abraços

Andreia

Link para o comentário
Compartilhar em outros sites

  • 0
olá, aproveitando o assunto, gostaria d saber como fazer para trocar a posição das colunas. Exemplo: ao selecionar um ítem para pesquisa num RadioGroup, digitar o valor a ser pesquisado numa edit e clicar num botão para pesquisar ele pega a coluna "1" e inverte com a coluna "0", ou seja, passa o "Nome" como primeira coluna e o "Código" ao lado. Desde já agradeço a atenção....
Link para o comentário
Compartilhar em outros sites

  • 0

Tipo:

var W0, W1 : integer;
begin
  if DBGrid1.Columns[0].FieldName = 'Codigo' then begin
     W0 := DBGrid1.Columns[0].Width;
     W1 := DBGrid1.Columns[1].Width;
     DBGrid1.Columns[0].FieldName := 'Nome';
     DBGrid1.Columns[0].Width := W1;
     DBGrid1.Columns[1].FieldName := 'Codigo';
     DBGrid1.Columns[1].Width := W0;
  end else begin
     W0 := DBGrid1.Columns[0].Width;
     W1 := DBGrid1.Columns[1].Width;
     DBGrid1.Columns[0].FieldName := 'Codigo';
     DBGrid1.Columns[0].Width := W1;
     DBGrid1.Columns[1].FieldName := 'Nome';
     DBGrid1.Columns[1].Width := W0;
  end;
end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...