DUVIDA SOBRE AUTOCOMPLETAR DE COMBOBOX

RPMARQUES 30/07/2012 11:17:28
#406843
Bom dia pessoal, tenho uma função chamada preenchecombo() onde eu passo o nome do compbo que vai ser preenchido e ela preeche ele...até ai tudo normal, mas eu não consegui fazer o auto completar funcionar, vou postar o código da função pra vcs me darem uma ajudinha nessa...

Citação:

Public Sub PreencheCombo(ByVal rCombo As ComboBox, ByVal rComandoSQL As String, ByVal rTabela As String, ByVal rCampoExibe As String, ByVal rCampoChave As String)

AbreBanco()
Dim DA As NpgsqlDataAdapter = New NpgsqlDataAdapter(rComandoSQL, conn)
Dim cmdSQL As New NpgsqlCommand(rComandoSQL, conn)
Dim DS As New DataSet

DA.Fill(DS, rTabela)
rCombo.DataSource = DS.Tables(rTabela)
rCombo.DisplayMember = rCampoExibe.Trim [ô]CAMPO QUE DEVE EXIBIR
rCombo.ValueMember = rCampoChave.Trim [ô]CAMPO QUE DEVE TRAZER A CHAVE


[ô]rCombo.AutoCompleteMode = AutoCompleteMode.Suggest
[ô]rCombo.AutoCompleteSource = AutoCompleteSource.CustomSource
[ô]For Each dr As DataRow In DS.Rows
[ô] cboFornecedor.AutoCompleteCustomSource.Add(dr([Ô]for_razaosocial[Ô]).ToString())
[ô]Next

FechaBanco()
End Sub



alguém pode me ajudar....
o código que esta comentado eu peguei da internet pra tetnar adaptar...mas não fui feliz nesta...

Alguém ai pode ajudar...

Abraços a todos...
KERPLUNK 30/07/2012 14:08:14
#406867
Resposta escolhida
1 - Para leitura de dados, não use DataSet, use DataReader
2 - A propriedade AutoCompleteCustomDataSource, recebe um datasource(como um datareader por exemplo), não precisa percorrer linha por linha
3 - Use blocos using, isso garante que a conexão, o comando e o datareader serão fechados e descartados corretamente
RPMARQUES 31/07/2012 08:38:47
#406909
tem um exemplo simples pra passar?
KERPLUNK 31/07/2012 08:46:17
#406911
rComandoSQL = [Ô]Select for_razaosocial from SUA_TABELA[Ô]

Dim DA As NpgsqlDataAdapter = New NpgsqlDataAdapter(rComandoSQL, conn)
Dim cmdSQL As New NpgsqlCommand(rComandoSQL, conn)
Dim dr As New NpgsqlDataReader = cmdSQL.ExecuteReader()
cboFornecedor.AutoCompleteCustomSource.Add(dr)

E é só isso...
RPMARQUES 31/07/2012 11:16:11
#406924
cara...não funcionou, da a msg qndo eu vou abrir o form
There is already an open DataRead associated with this Command which must be closed first

aqui esta o código da proc q ficou

Citação:


AbreBanco()
Dim DA As NpgsqlDataAdapter = New NpgsqlDataAdapter(rComandoSQL, conn)
Dim cmdSQL As New NpgsqlCommand(rComandoSQL, conn)
Dim DRTmp As NpgsqlDataReader = cmdSQL.ExecuteReader
Dim DS As New DataSet

DA.Fill(DS, rTabela)


rCombo.DataSource = DS.Tables(rTabela)
rCombo.DisplayMember = rCampoExibe.Trim [ô]CAMPO QUE DEVE EXIBIR
rCombo.ValueMember = rCampoChave.Trim [ô]CAMPO QUE DEVE TRAZER A CHAVE

rCombo.AutoCompleteMode = AutoCompleteMode.Suggest
rCombo.AutoCompleteSource = AutoCompleteSource.CustomSource

rCombo.AutoCompleteCustomSource.Add(DR([Ô]nome[Ô].Trim))

DA.Dispose()
cmdSQL.Dispose()
DRTmp.Close()
DS.Dispose()

KERPLUNK 31/07/2012 11:19:03
#406925
Nada disso você precisa:

Dim DS As New DataSet

DA.Fill(DS, rTabela)


rCombo.DataSource = DS.Tables(rTabela)
rCombo.DisplayMember = rCampoExibe.Trim [ô]CAMPO QUE DEVE EXIBIR
rCombo.ValueMember = rCampoChave.Trim [ô]CAMPO QUE DEVE TRAZER A CHAVE

RPMARQUES 31/07/2012 11:31:09
#406926
mas se eu tirar estas linhas, como ele vai saber qual campo exibir e qual campo ele tem q pegar o valor?
KERPLUNK 31/07/2012 11:36:34
#406927
Você observou bem isso:
rComandoSQL = [Ô]Select CAMPO_CODIGO, for_razaosocial from SUA_TABELA[Ô]

Dim DA As NpgsqlDataAdapter = New NpgsqlDataAdapter(rComandoSQL, conn)
Dim cmdSQL As New NpgsqlCommand(rComandoSQL, conn)
Dim dr As New NpgsqlDataReader = cmdSQL.ExecuteReader()
cboFornecedor.AutoCompleteCustomSource.Add(dr)
rCombo.DisplayMember = [Ô]for_razaosocial[Ô] [ô]CAMPO QUE DEVE EXIBIR
rCombo.ValueMember = [Ô]CAMPO_CODIGO[Ô] [ô]CAMPO QUE DEVE TRAZER A CHAVE

é SÓ ISSO que precisa
RPMARQUES 31/07/2012 11:46:44
#406929
Segue dando a msg

Citação:

There is already an open DataRead associated with this Command which must be closed first

KERPLUNK 31/07/2012 11:57:18
#406931
Tem algum outro datareader aberto... mostre o código que está no seu formulário
RPMARQUES 31/07/2012 14:36:39
#406944
cara...era uma reteada minha aqui...valeu pela ajuda como teu código funcionou...
Tópico encerrado , respostas não são mais permitidas