none
Carregar Combobox através de Textbox RRS feed

  • 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.

    sábado, 3 de março de 2018 14:25

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

    domingo, 4 de março de 2018 15:28

Todas as Respostas

  • Tente assim:

    Private Sub txtCodigo_LostFocus(sender As Object, e As EventArgs) Handles txtCodigo.LostFocus
            If txtCodigo.Text = "" Then Exit Sub
    
            txtGrupo.SelectedItem = cint(txtCodGrupo.Text) - 1
            PLeDados()
        End Sub


    MARIANO1776

    sábado, 3 de março de 2018 14:47
  • Eu já tinha tentado com o CInt, porém sem o -1 no final.

    O erro continua.

    sábado, 3 de março de 2018 14:53
  • 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.
    sábado, 3 de março de 2018 15:04
  • 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

    sábado, 3 de março de 2018 15:07
  • O mesmo erro ainda. Vou dar mais uma olhada no código, qualquer coisa volto a postar.
    sábado, 3 de março de 2018 15:19
  • 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
    sábado, 3 de março de 2018 15:22
  • É exatamente isso que eu estava vendo agora. Estou reescrevendo o código aqui.
    sábado, 3 de março de 2018 15:25
  • Ok, se necessitar, retorne.

    MARIANO1776

    sábado, 3 de março de 2018 15:42
  • 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!
     
    sábado, 3 de março de 2018 17:21
  • 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.

    sábado, 3 de março de 2018 20:52
  • 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

    sábado, 3 de março de 2018 21:07
  • No select não está apresentando erro nenhum.

    Por isso não coloquei o Try/Catch.

    Tá dificil :(

    sábado, 3 de março de 2018 21:16
  • Mas o que está ocorrendo?

    Não está carregando a combobox?

    Qual o campo da tabela é para preencher a comobox?


    MARIANO1776

    sábado, 3 de março de 2018 21:40
  • 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

    sábado, 3 de março de 2018 21:48
  • 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.

    sábado, 3 de março de 2018 21:58
  • 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.
    sábado, 3 de março de 2018 22:00
  • 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.

    sábado, 3 de março de 2018 22:05
  • 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.

    sábado, 3 de março de 2018 22:17
  • 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

    domingo, 4 de março de 2018 00:18
  • Dá uma olhada aí:

    https://github.com/ThiagoxxLive/vault-tec/blob/master/frmCadProdutos

    domingo, 4 de março de 2018 01:04
  • Vi o código, mas as dúvidas permanecem.

    Rode o programa e printe tela a tela o que está acontecendo e poste as imagens aqui para que eu entenda melhor e possa ajudá-lo.


    MARIANO1776

    domingo, 4 de março de 2018 01:09
  • Ok, vai lá:

    domingo, 4 de março de 2018 01:15
  • Qual evento gerou a mensagem?

    MARIANO1776

    domingo, 4 de março de 2018 01:16
  • txtCodGrupo.LostFocus
    domingo, 4 de março de 2018 01:24
  • txtCodigo_LostFocus?

    Que há na textbox neste momento?

    Dê um exemplo:


    MARIANO1776

    domingo, 4 de março de 2018 01:27
  • Está o código do indice.

    No caso: txtCodigoGrupo = 1 teoricamente o combo tinha que me retornar Inicial que é o primeiro do indice.

    domingo, 4 de março de 2018 01:30
  • Eu preciso que o Indice da Combo seja igual a do txtCodGrupo.
    domingo, 4 de março de 2018 01:32
  • 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

    domingo, 4 de março de 2018 01:54
  • Continuamos amanhã.

    Enquanto está desenvolvendo, troque ex.message por ex.tostring.

    Assim você verá qual linha está com erro.


    MARIANO1776

    domingo, 4 de março de 2018 02:02
  • O problema é que não dá erro :(
    domingo, 4 de março de 2018 02:07
  • 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

    domingo, 4 de março de 2018 15:28
  • 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

    segunda-feira, 5 de março de 2018 22:55
  • Que bom que encontrou.

    Se alguma das respostas foi útil, por gentileza, marcar.


    MARIANO1776

    terça-feira, 6 de março de 2018 00:38