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

(Resolvido) Problemas Com Listview


Guest --samuelsjn --

Pergunta

Guest --samuelsjn --

Pessoal,

Estou fazendo um sistema em delphi e esta ocorrendo um pequeno ("grande") problema.

Estou crindo uma tela de pesquisa utilisando o componente ListView.

As colunas desta tabela (ListView) contem nomes para a identificação das informações.

Quando a janela de pesquisa abre sem nenhuma informação buscada na base de dados, a tabela (ListView) aparece sem erro nenhum. Mas, se alguma informação existir na base de dados o título desta tabela (ListView) some, e só aparece quando clicamos com o mouse.

Estou utilizando delphi 7 com o banco de dados postgres utilizando conexão atraves do componente ADOConnection, e as consultas sql atraves do componente ADOQuery.

Gostaria de saber um jeito de reverter este problema.

Segue abaixo o código que estou utilizando para preencher a ListView:

procedure TfrmPesquisaReq.CarregaDados;
var
  lstitmItem: TListItem;
  vCont: Integer;
begin
  lstvwDados.ShowColumnHeaders := true;
  lstvwDados.Clear;
  if cmbxFiltro.ItemIndex = 0 then
  begin
    dtmdlConnection.QueryAuxiliar.Close;
    dtmdlConnection.QueryAuxiliar.SQL.Clear;
    dtmdlConnection.QueryAuxiliar.SQL.Add('Select req.id, req.data, req.dia, req.etapa, und.nome, Sum(quantidade) as quantidade');
    dtmdlConnection.QueryAuxiliar.SQL.Add('from req, und where req.id = und.id');
    dtmdlConnection.QueryAuxiliar.SQL.Add('group by req.id, req.data, req.dia, req.etapa, und.nome');
  end
  else
  begin
    dtmdlConnection.QueryAuxiliar.Close;
    dtmdlConnection.QueryAuxiliar.SQL.Clear;
    dtmdlConnection.QueryAuxiliar.SQL.Add('Select req.id, req.data, req.dia, req.etapa, und.nome, Sum(und.quantidade) as quantidade');
    dtmdlConnection.QueryAuxiliar.SQL.Add('from req, und where req.id = :condicao and req.id = und.id');
    dtmdlConnection.QueryAuxiliar.SQL.Add('group by req.id, req.data, req.dia, req.etapa, und.nome');
    dtmdlConnection.QueryAuxiliar.Parameters.ParamByName('condicao').Value := StrToInt(strnglstReq[cmbxFiltro.ItemIndex]);
  end;
  dtmdlConnection.QueryAuxiliar.Open;
  vCont := 0;
  while not dtmdlConnection.QueryAuxiliar.Eof do
  begin
    vCont := vCont + 1;
    lstitmItem := lstvwDados.Items.Add;
    lstitmItem.Caption := IntToStr(vCont);
    lstitmItem.SubItems.Add(dtmdlConnection.QueryAuxiliar.FieldByName('id').AsString);
    lstitmItem.SubItems.Add(dtmdlConnection.QueryAuxiliar.FieldByName('data').AsString);
    lstitmItem.SubItems.Add(dtmdlConnection.QueryAuxiliar.FieldByName('nome').AsString);
    lstitmItem.SubItems.Add(dtmdlConnection.QueryAuxiliar.FieldByName('dia').AsString);
    lstitmItem.SubItems.Add(dtmdlConnection.QueryAuxiliar.FieldByName('etapa').AsString);
    lstitmItem.SubItems.Add(dtmdlConnection.QueryAuxiliar.FieldByName('quantidade').AsString);
    dtmdlConnection.QueryAuxiliar.Next;
  end;
  dtmdlConnection.QueryAuxiliar.Close;
  lstitmItem.ListView.Refresh;
end;

Estou chamando esta procedure no onActivate do formulario.

Os nomes das colunas das tableas estão diferentes que as da base de dados.

alguém poderia me ajudar.

E outra pergunta. Em qual evento do ADOQuery que eu trato as respostas de erro de chave estrangeira vindas do banco postgres

Obrigado mais uma vez e desculpe pela amolação

Editado por Micheus
Adicionado o delimitador de código [code] [/code]. Lembre-se de utilizá-lo para melhor visualização
Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
As colunas desta tabela (ListView) contem nomes para a identificação das informações.

Quando a janela de pesquisa abre sem nenhuma informação buscada na base de dados, a tabela (ListView) aparece sem erro nenhum. Mas, se alguma informação existir na base de dados o título desta tabela (ListView) some, e só aparece quando clicamos com o mouse.

samuelsjn, além de manipulá-la em CarregaDados, você manipula a propriedade lstvwDados.ShowColumnHeaders em algum outro ponto do programa?
Link para o comentário
Compartilhar em outros sites

  • 0
Guest --samuelsjn --
As colunas desta tabela (ListView) contem nomes para a identificação das informações.

Quando a janela de pesquisa abre sem nenhuma informação buscada na base de dados, a tabela (ListView) aparece sem erro nenhum. Mas, se alguma informação existir na base de dados o título desta tabela (ListView) some, e só aparece quando clicamos com o mouse.

samuelsjn, além de manipulá-la em CarregaDados, você manipula a propriedade lstvwDados.ShowColumnHeaders em algum outro ponto do programa?

Caro amigo Micheus,

Eu não utilizo o lstvwDados.ShowColumnHeaders em outro lugar, somente aqui no CarregaDados.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Eu não utilizo o lstvwDados.ShowColumnHeaders em outro lugar, somente aqui no CarregaDados.
samuelsjn, então verifique se a propriedade ViewStyle está definida com outro valor que não seja vsReport, porque é apenas neste estilo que o header das colulas são mostrados.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --samuelsjn --
Eu não utilizo o lstvwDados.ShowColumnHeaders em outro lugar, somente aqui no CarregaDados.
samuelsjn, então verifique se a propriedade ViewStyle está definida com outro valor que não seja vsReport, porque é apenas neste estilo que o header das colulas são mostrados.

Caro Micheus,

Como vai?

Obrigado pela força que esta me dando.

Cara o evento ViewStyle esta como vsReport.

Não teria como "pintar" o cabeçalho logo apos a entrada dos dados na ListView não?

valeu

Link para o comentário
Compartilhar em outros sites

  • 0
Não teria como "pintar" o cabeçalho logo apos a entrada dos dados na ListView não?
samuelsjn, dando uma olhada melhor numa tela que eu utilizo o ListView, me ocorreu que talvez va não tenha definido em design-time o nome das colunas.

No código, o que você faz é inserir os dados referentes as colunas e que serão mostrados no "grid" (eu também faço deste modo). Então, acho que talvez você não tenha criado as colunas em design-time via propriedade Columns (tem um botãozinho com "...").

A primeira coluna definida será aquela em que aparecerá o seu "lstitmItem.Caption", as demais correspondem a cada "lstitmItem.SubItems.Add".

Não seria isto que está faltando?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --samuelsjn --
Não teria como "pintar" o cabeçalho logo apos a entrada dos dados na ListView não?
samuelsjn, dando uma olhada melhor numa tela que eu utilizo o ListView, me ocorreu que talvez va não tenha definido em design-time o nome das colunas.

No código, o que você faz é inserir os dados referentes as colunas e que serão mostrados no "grid" (eu também faço deste modo). Então, acho que talvez você não tenha criado as colunas em design-time via propriedade Columns (tem um botãozinho com "...").

A primeira coluna definida será aquela em que aparecerá o seu "lstitmItem.Caption", as demais correspondem a cada "lstitmItem.SubItems.Add".

Não seria isto que está faltando?

Ola Micheus,

Eu coloquei assim na propriedade Columns:

0 - Ordem // esse vai ser o cabeçario da listview

1 - id

2 - data

3 - nome

4 - dia

5 - etapa

6 - quantidade

ai eu utilizo o CarregaDados na seguencia em que esta para colocar as informações nas colunas...

Mas eu utilizei sim esta propriedade da ListView.

No sistema só esta acontecendo nesta janela, que é uma janela de pesquisa, as outras estão funcionando mil maravilhas

Abraço e obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Eu coloquei assim na propriedade Columns:

0 - Ordem // esse vai ser o cabeçario da listview

1 - id

2 - data

3 - nome

4 - dia

5 - etapa

6 - quantidade

ai eu utilizo o CarregaDados na seguencia em que esta para colocar as informações nas colunas...

Mas eu utilizei sim esta propriedade da ListView.

No sistema só esta acontecendo nesta janela, que é uma janela de pesquisa, as outras estão funcionando mil maravilhas

samuelsjn, se é assim, acho que se esgotaram minhas sugestões. :(

Mas vão alguns comentários sobre o código que você postou inicialmente:

1) acho que seria interessante chamar o procedimento no OnShow, ao invés de no OnActivate;

2) lstitmItem.ListView.Refresh; - esta linha ao final do seu procedimento não é apropriada. Se seu dataset QueryAuxiliar não contiver dados, a variável lstitmItem será nula (ou lixo) e poderá resultar em erro. Se realmente for necessário forçar a atualização, melhor seria você utilizar o proprio ListView -> lstvwDados.Refresh;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --samuelsjn --

Grande Micheus,

Cara funcionou. Muito Obrigado mesmo....

Eu coloquei o CarregaDados no on Show e funcionou....

você sabe me explicar porque????

Amigo muito obrigado mesmo, voce me poupou muito tempo.....

Valeu

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Eu coloquei o CarregaDados no on Show e funcionou....

você sabe me explicar porque????

Não saberia explicar adequadamente, não. Mas alguns procedimentos que implicam em mudanças visuais antes de o form ser mostrado (OnShow), não funcionam muito bem se você colocar em outro evento que ocorra antes de ele estar realmente preparado para ser mostrado.

Só verificando a seqüência em que os eventos estão ocorrendo para tentar entender o porque de não funcionar.

Abraços

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,4k
×
×
  • Criar Novo...