ADODC
Possuo um DATAGRID vinculado a um controle ADODC, quando avanço ou recuo registros atualizo o adodc com um refresh, mas existe uma lentidão quando estou executando em rede.
Existe uma outra maneira de atualizar o DATAGRID sem ter que executar um refresh no controle ADO ?
Existe uma outra maneira de atualizar o DATAGRID sem ter que executar um refresh no controle ADO ?
Pq naum tenta usar o Listview ! e preenche ele com um for ! c gostar da idéia mude essas propriedades no listview:
Fullrowselect = True
Labeledit = 1 - Manual
View = 3 - Report
e faça esse for: uma função é melhor pq vc pode chamar a qualquer momento !
lstUsuários.ListItems.Clear ' lstUsuários é o nome do listview
With lstUsuários
' Desenha as Linhas
If .ColumnHeaders.Count = 0 Then
.ColumnHeaders.Add 1, "Código", "Código", 929.8583 ' as colunas
.ColumnHeaders.Add 2, "Usuário", "» Usuário", 3344.882
.ColumnHeaders.Add 3, "NÃvel", "NÃvel", 929.8822
End If
For its = 1 To rsBusca.RecordCount ' rsBusca é o recordset
.ListItems.Add its, , rsBusca!usuario_id ' nome dos campos
.ListItems(its).ListSubItems.Add 1, , rsBusca!usuario 'nome dos campos
.ListItems(its).ListSubItems.Add 2, , rsBusca!nivel 'nome dos campos
rsBusca.MoveNext
Next
End With
Fullrowselect = True
Labeledit = 1 - Manual
View = 3 - Report
e faça esse for: uma função é melhor pq vc pode chamar a qualquer momento !
lstUsuários.ListItems.Clear ' lstUsuários é o nome do listview
With lstUsuários
' Desenha as Linhas
If .ColumnHeaders.Count = 0 Then
.ColumnHeaders.Add 1, "Código", "Código", 929.8583 ' as colunas
.ColumnHeaders.Add 2, "Usuário", "» Usuário", 3344.882
.ColumnHeaders.Add 3, "NÃvel", "NÃvel", 929.8822
End If
For its = 1 To rsBusca.RecordCount ' rsBusca é o recordset
.ListItems.Add its, , rsBusca!usuario_id ' nome dos campos
.ListItems(its).ListSubItems.Add 1, , rsBusca!usuario 'nome dos campos
.ListItems(its).ListSubItems.Add 2, , rsBusca!nivel 'nome dos campos
rsBusca.MoveNext
Next
End With
Concordo com o ATERLONI.
Trabalhar com recordsets desconectados é bem melhor.
Daà você pode abrir o recordset, preencher o listview (que é bem mais "apresentável" do que o datagrid) e fechar o recordset.
E pode movimentar pelos itens da lista sem ter que ficar buscando dados no recordset.
Trabalhar com recordsets desconectados é bem melhor.
Daà você pode abrir o recordset, preencher o listview (que é bem mais "apresentável" do que o datagrid) e fechar o recordset.
E pode movimentar pelos itens da lista sem ter que ficar buscando dados no recordset.
Obrigado pelas respostas galera, mas vejam uma coisa:
A minha rotina esta funcionando perfeitamente, exceto esta lentidão, mas concordo em mudar desde que o listview possua recursos para editar as linhas dos registros exibidos, pois utilizo o DATAGRID para exibir e para alterar, excluir e para essas funções não preciso nem criar rotinas, certo ?
Paulo
A minha rotina esta funcionando perfeitamente, exceto esta lentidão, mas concordo em mudar desde que o listview possua recursos para editar as linhas dos registros exibidos, pois utilizo o DATAGRID para exibir e para alterar, excluir e para essas funções não preciso nem criar rotinas, certo ?
Paulo
Uso o listview apenas para exibir uma lista dos registros.
No caso de uma edição, quando teclo ENTER, por exemplo, abre um formulário com todos os campos do registro selecionado.
Dê uma olhada como ficou uma tela que eu postei TELAS DE JUNHO/05:
O visual fica muito bom.
E outra coisa: quando visito alguns futuros clientes, eles me mostram os programas que estão usando e a maioria reclama que, quando esbarra em alguma tecla, sobrescreve o que estava no grid. E como a maioria não costuma "pensar rápido" pra teclar ESC, acabam perdendo a informação.
Vai dar mais trabalho do que permitir a edição direto no grid, mas no meu caso, gostei muito do resultado.
No caso de uma edição, quando teclo ENTER, por exemplo, abre um formulário com todos os campos do registro selecionado.
Dê uma olhada como ficou uma tela que eu postei TELAS DE JUNHO/05:
O visual fica muito bom.
E outra coisa: quando visito alguns futuros clientes, eles me mostram os programas que estão usando e a maioria reclama que, quando esbarra em alguma tecla, sobrescreve o que estava no grid. E como a maioria não costuma "pensar rápido" pra teclar ESC, acabam perdendo a informação.
Vai dar mais trabalho do que permitir a edição direto no grid, mas no meu caso, gostei muito do resultado.
Amigo Paulo César
Troquei o DATAGRID pelo LISTVIEW e gostaria de saber como armazenar em objetos texbox os valores correpondentes quando navego pelas linhas do LISTVIEW, por exemplo tenho tres colunas NOME,ENDERECO,CEP e para cada movimentação na grade, eu vinculo os valores atuais nos texbox, entende ?
No aguardo
Troquei o DATAGRID pelo LISTVIEW e gostaria de saber como armazenar em objetos texbox os valores correpondentes quando navego pelas linhas do LISTVIEW, por exemplo tenho tres colunas NOME,ENDERECO,CEP e para cada movimentação na grade, eu vinculo os valores atuais nos texbox, entende ?
No aguardo
Entendi sim...
Para pegar o valor da primeira coluna do listview, é fácil:
Para pegar os outros valores das colunas faça assim:
No caso de muitos campos, você pode automatizar assim:
Qualquer outra dúvida, pode mandar mensagem interna ou pelo Hotmail.
-----
Mas eu faço assim...
Na primeira coluna, sempre vai o número do registro.
Quando o usuário tecla ENTER, esse número vai para uma variável.
Um formulário de edição é exibido e no evento Load, chama uma função que abre um recordset e posiciona no registro selecionado.
Neste form estão os texts que ficarão com os valores dos campos da tabela.
For Its = 0 To txtFields.UBound
txtFields(i).Text = IIf(IsNull(rsClientes(i).Value), "", rsClientes(i).Value)
Next
Para pegar o valor da primeira coluna do listview, é fácil:
txtNome.Text = lstView.SelectedItem.Text
Para pegar os outros valores das colunas faça assim:
txtEndereco.Text = lstView.SelectedItem.ListSubItems(1).Text
txtCEP.Text = lstView.SelectedItem.ListSubItems(2).Text
No caso de muitos campos, você pode automatizar assim:
txtFields(0).Text = lstView.SelectedItem.Text
For i = 1 to txtFields.Count
txtFields(i).Text = lstView.SelectedItem.ListSubItems(i).Text
Next
Qualquer outra dúvida, pode mandar mensagem interna ou pelo Hotmail.
-----
Mas eu faço assim...
Na primeira coluna, sempre vai o número do registro.
Quando o usuário tecla ENTER, esse número vai para uma variável.
Um formulário de edição é exibido e no evento Load, chama uma função que abre um recordset e posiciona no registro selecionado.
Neste form estão os texts que ficarão com os valores dos campos da tabela.
For Its = 0 To txtFields.UBound
txtFields(i).Text = IIf(IsNull(rsClientes(i).Value), "", rsClientes(i).Value)
Next
Paulo, novamente sua dica funcionou !
Obrigado por enquanto , pois talvez ainda terei dúvidas com este controle então espero contar com sua ajuda !
Ateh mais.
Obrigado por enquanto , pois talvez ainda terei dúvidas com este controle então espero contar com sua ajuda !
Ateh mais.
Pode contar comigo.
E tenha certeza de que ficará satisfeito com este controle.
Além de bonito ele é bastante funcional.
E tenha certeza de que ficará satisfeito com este controle.
Além de bonito ele é bastante funcional.
Bom dia Paulo, tudo bem ?
Amigo, qual a instrução para retornar o número da linha do LISTVIEW, por exemplo, um lista com 10 linhas, movimento ateh a linha 6, então o comando me retornaria o valor 6 !
Abraço,
Paulo
Amigo, qual a instrução para retornar o número da linha do LISTVIEW, por exemplo, um lista com 10 linhas, movimento ateh a linha 6, então o comando me retornaria o valor 6 !
Abraço,
Paulo
Bom dia,
Você pode colocar no evento KeyUp do listview:
Msgbox lstView.SelectedItem.Index
Você pode colocar no evento KeyUp do listview:
Msgbox lstView.SelectedItem.Index
Tópico encerrado , respostas não são mais permitidas