Usuário com melhor resposta
Carregar Combobox através de Textbox

Pergunta
-
Bom dia, estou com um problema para selecionar o indice de uma combobox atraves de um textbox.
Exemplo: quando coloco o código 1 no textbox, a combobox deveria me trazer o valor "Inicial".
ao contrario eu consigo normalmente, sem problemas.
Alguma luz?
Private Sub txtCodigo_LostFocus(sender As Object, e As EventArgs) Handles txtCodigo.LostFocus If txtCodigo.Text = "" Then Exit Sub txtGrupo.SelectedItem = txtCodGrupo.Text PLeDados() End Sub
O erro é o seguinte:
Exceção interna 1:
FormatException: A cadeia de caracteres de entrada não estava em um formato correto.
Respostas
-
Prezado Thiago.
Há erro sim.
Sua imagem enviada informa um erro.
No trecho de código abaixo há um erro.
Por isso minha sugestão de trocar ex.message por ex.tostring.
Aguardo seu retorno.
Private Sub txtCodGrupo_LostFocus(sender As Object, e As EventArgs) Handles txtCodGrupo.LostFocus PCarregaComboGrupo() Try cmbGrupo.SelectedIndex = txtCodGrupo.ToString ''ERRO AQUI Catch ex As Exception MsgBox(ex.Message) ' TROQUE POR EX.TOSTRING End Try Exit Sub End Sub
MARIANO1776
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 7 de março de 2018 17:45
Todas as Respostas
-
-
-
Com:
Private Sub txtCodGrupo_LostFocus(sender As Object, e As EventArgs) Handles txtCodGrupo.LostFocus If txtCodGrupo.Text = "" Then Exit Sub If txtCodGrupo.Text = "?" Then LeGrupo() txtGrupo.SelectedIndex = CInt(txtCodGrupo.Text).ToString End If End Sub
o erro é o mesmo. -
Tente assim:
Try If IsNumeric(txtCodGrupo.Text) Then txtGrupo.Text = "" txtGrupo.SelectedText = CStr( txtGrupo.Items.Item(CInt(txtCodGrupo.Text) - 1)) Else MsgBox("Número inválido") End If Catch ex As Exception MsgBox(ex.ToString) End Try
MARIANO1776
-
-
Fiz o teste aqui e deu certo.
Somente por preguntar:
Seu combo está carregado?
Try If IsNumeric(txtCodGrupo.Text) Then txtGrupo.Text = "" txtGrupo.SelectedText = CStr(txtGrupo.Items.Item(CInt(txtCodGrupo.Text) - 1)) Else MsgBox("Número inválido") End If Catch ex As Exception MsgBox(ex.ToString) End Try
MARIANO1776
- Editado Mariano1776 sábado, 3 de março de 2018 15:24
-
-
-
Olá boa tarde,
Existe um método para obter o index através do texto, ex:
Private Sub txtCodigo_LostFocus(sender As Object, e As EventArgs) Handles txtCodigo.LostFocus If txtCodigo.Text = "" Then Exit Sub txtGrupo.SelectedIndex = txtGrupo.FindStringExact(txtCodGrupo.Text) PLeDados() End Sub
Espero ter ajudado, um abraço!
-
Boa tarde a todos, ainda sem sucesso.
Vou postar o código do select aqui também.
Private Sub PCarregaCombo() Using con As MySqlConnection = GetConnectionMySQL() Try con.Open() Dim sql As String = "select *from grupo_prod" Dim cmd As MySqlCommand = New MySqlCommand(sql, con) Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd) Dim dt As DataTable = New DataTable da.Fill(dt) txtGrupo.DisplayMember = "nome_grupo" txtGrupo.DataSource = dt Catch ex As Exception Finally con.Close() End Try End Using End Sub
E o código do lost focus:
Private Sub txtCodGrupo_LostFocus(sender As Object, e As EventArgs) Handles txtCodGrupo.LostFocus PCarregaCombo() Exit Sub End Sub
Eu deixei sem os códigos que vocês me passaram ai em cima.
-
Coloque um msgbox para retornos erros.
Private Sub PCarregaCombo() Using con As MySqlConnection = GetConnectionMySQL() Try con.Open() Dim sql As String = "select *from grupo_prod" Dim cmd As MySqlCommand = New MySqlCommand(sql, con) Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd) Dim dt As DataTable = New DataTable da.Fill(dt) txtGrupo.DisplayMember = "nome_grupo" txtGrupo.DataSource = dt Catch ex As Exception
msgbox(ex,ToString()) Finally con.Close() End Try End Using End Sub
MARIANO1776
-
-
-
Tente assim.
Posso ter digitado errado.
Private Sub PCarregaCombo() Using con As MySqlConnection = GetConnectionMySQL() Try con.Open() Dim sql As String = "select sua_coluna from grupo_prod" Dim cmd As MySqlCommand = New MySqlCommand(sql, con) Dim RD As mysqldatareader RD = cmd.executereader While RD.read txtGrupo.Items.Add(RD(0).tostring) End While Catch ex As Exception MsgBox(ex, ToString()) Finally con.Close() End Try End Using End Sub
MARIANO1776
-
Então, a Sub pra carregar a combobox está setada pra quando eu clicar nela, ela carregar. Até aí normal, carrega sem nenhum problema.
Private Sub cmbGrupo_MouseClick(sender As Object, e As MouseEventArgs) Handles cmbGrupo.MouseClick PCarregaComboGrupo() End Sub
Quando eu seleciono o indice dela, o txtcodGrupo preenche conforme o indice correto.
Exemplo, se eu selecionar o indice "Inicial", o txtCodGrupo recebe 1
se eu selecionar o indice teste o txtCodGrupo recebe 2. Sem problemas.
O problema é: Quando eu coloco o código do produto no txtCodigo (que é o campo do código do produto) traz todas as informações corretamente, inclusive a do txtCodGrupo. Porém, não traz o indice da combobox.
Como estou desenvolvendo um sistema para controle de estoque, isso é essencial para filtros posteriores.
Como já falei na thread anterior, sou iniciante, eu perguntei para o programador da minha empresa, que desenvolve em VB, ele não quis me passar como ele faz (pois no sistema da empresa na qual trabalho, os indices das comboboxes vem de acordo com o que foi selecionado no código referente ao Grupo no caso.)
Não sei se conseguiu entender.
-
Segue código:
Private Sub txtCodigo_LostFocus(sender As Object, e As EventArgs) Handles txtCodigo.LostFocus If txtCodigo.Text = "" Then Exit Sub Else PLeDados() End If Exit Sub End Sub
E o select:Private Sub LeProdutos() Dim dr As MySqlDataReader = Nothing Using con As MySqlConnection = GetConnectionMySQL() Try con.Open() Dim sql As String = "SELECT * FROM cad_prod WHERE cod_prod=" & txtCodigo.Text Dim cmd As MySqlCommand = New MySqlCommand(sql, con) dr = cmd.ExecuteReader If dr.HasRows Then dr.Read() txtBarras.Text = dr.Item("barras_prod") txtDescricao.Text = dr.Item("descricao_prod") cmbUnidade.Text = dr.Item("unidade_prod") txtDataCad.Text = dr.Item("datacad_prod") txtCusto.Text = dr.Item("custo_prod") txtIndice.Text = dr.Item("indice_prod") txtVenda.Text = dr.Item("venda_prod") txtEstoque.Text = dr.Item("estoque_prod") txtCodForn.Text = dr.Item("forn_prod") txtCodGrupo.Text = dr.Item("grupo_prod") txtSubGrupo.Text = dr.Item("subgrupo_prod") txtNCM.Text = dr.Item("ncm_prod") txtCodigoCST.Text = dr.Item("cst_prod") txtCodCSOSN.Text = dr.Item("csosn_prod") txtCFOP.Text = dr.Item("cfop_prod") txtCEST.Text = dr.Item("cest_prod") Else MsgBox("Informe Corretamente o Código do Produto!", MsgBoxStyle.Exclamation) End If Catch ex As Exception MsgBox("Ocorreu um erro ao tentar consultar o Produto!" + ex.Message) Finally con.Close() End Try End Using End Sub
Talvez o erro esteja nesse select. -
Já tentei:
Private Sub PLeDados() Dim dr As MySqlDataReader = Nothing Using con As MySqlConnection = GetConnectionMySQL() Try con.Open() Dim sql As String = "SELECT * FROM cad_prod WHERE cod_prod=" & txtCodigo.Text & "; select * from grupo_prod WHERE nome_grupo=" & cmbGrupo.Text Dim cmd As MySqlCommand = New MySqlCommand(sql, con) dr = cmd.ExecuteReader If dr.HasRows Then dr.Read() txtBarras.Text = dr.Item("barras_prod") txtDescricao.Text = dr.Item("descricao_prod") cmbUnidade.Text = dr.Item("unidade_prod") txtDataCad.Text = dr.Item("datacad_prod") txtCusto.Text = dr.Item("custo_prod") txtIndice.Text = dr.Item("indice_prod") txtVenda.Text = dr.Item("venda_prod") txtEstoque.Text = dr.Item("estoque_prod") txtCodForn.Text = dr.Item("forn_prod") txtCodGrupo.Text = dr.Item("grupo_prod") txtSubGrupo.Text = dr.Item("subgrupo_prod") txtNCM.Text = dr.Item("ncm_prod") txtCodigoCST.Text = dr.Item("cst_prod") txtCodCSOSN.Text = dr.Item("csosn_prod") txtCFOP.Text = dr.Item("cfop_prod") txtCEST.Text = dr.Item("cest_prod") cmbGrupo.SelectedIndex = dr.Item("nome_grupo") Else MsgBox("Informe Corretamente o Código do Produto!", MsgBoxStyle.Exclamation) End If Catch ex As Exception MsgBox("Ocorreu um erro ao tentar consultar o Produto!" + ex.Message) Finally con.Close() End Try End Using End Sub
E também não deu certo.
-
Resumindo: eu preciso que selecione o indice da combobox conforme o valor do txtcodGrupo
Se o valor do txtCodGrupo for 1
então, preenche o primeiro item do combo
se o valor for 2, preenche o segundo item do combo.
- Editado Thiago Marcondes sábado, 3 de março de 2018 22:18
-
Fiz este teste aqui e deu certo.
Pergunto novamente
Sua combobox está sendo carregada?
Rode o programa e printe tela a tela o que está acontecendo e poste aqui para que eu entenda melhor e possa ajudá-lo.
Try If IsNumeric(txtCodGrupo.Text) Then txtGrupo.Text = "" txtGrupo.SelectedText = CStr(txtGrupo.Items.Item(CInt(txtCodGrupo.Text) - 1)) Else MsgBox("Número inválido") End If Catch ex As Exception MsgBox(ex.ToString) End Try
MARIANO1776
-
-
-
-
-
txtCodGrupo.LostFocus
- Editado Thiago Marcondes domingo, 4 de março de 2018 01:25
-
-
-
-
Aqui neste trecho?
Private Sub txtCodGrupo_LostFocus(sender As Object, e As EventArgs) Handles txtCodGrupo.LostFocus PCarregaComboGrupo() Try cmbGrupo.SelectedIndex = txtCodGrupo.ToString Catch ex As Exception MsgBox(ex.Message) End Try Exit Sub End Sub
MARIANO1776
-
-
-
Prezado Thiago.
Há erro sim.
Sua imagem enviada informa um erro.
No trecho de código abaixo há um erro.
Por isso minha sugestão de trocar ex.message por ex.tostring.
Aguardo seu retorno.
Private Sub txtCodGrupo_LostFocus(sender As Object, e As EventArgs) Handles txtCodGrupo.LostFocus PCarregaComboGrupo() Try cmbGrupo.SelectedIndex = txtCodGrupo.ToString ''ERRO AQUI Catch ex As Exception MsgBox(ex.Message) ' TROQUE POR EX.TOSTRING End Try Exit Sub End Sub
MARIANO1776
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 7 de março de 2018 17:45
-
Boa noite, fiquei sem internet domingo, o problema na verdade estava num select que tinha feito para preencher o codigo da combo.
Apaguei o código do select e substitui o parametro pelo indice da combo convertido em string.
Muito obrigado pelo ajuda novamente!
Abraços
-