none
visual basic e windows forms [RESOLVIDO] RRS feed

  • Pergunta

  • Boa noite pessoal, tudo bem ?

    estou tentando aprender visual basic usando o que conheço de c#, tive alguns problemas mas fui passando, só que agora já não consigo da prosseguimento, eu tenho um form de cadastro de empresas com os botões de inserir, atualizar, excluir, porém quando clico a primeira vez em um dos botões ele me gera o seguinte erro : object reference not set to an instance of an object. A principio pensei que fosse objeto que não estanciei, porém percebi que se eu fizesse a segunda tentativa ele fazia o processo sem gerar problemas, então percebi que o problema estava no meu datagridview que não estava com o cursor em um registro, fiz testes colocando valores fixos e confirmei, era nele mesmo o problema, só que eu tenho o mesmo código em c# e não tenho este problema ele inicia o form com o datagridview já com o primeiro item marcado, percebi também que se eu mando ele preencher o datagridview pela primeira vez ele não seleciona um item, porém se mando uma segunda vez ele seleciona o item, segue abaixo meu codigo :

    meu codigo dos eventos onshow e o selection chande de meu data gridview

    Private Sub FormEmpresa_Shown(sender As System.Object, e As System.EventArgs) Handles MyBase.Shown
            Dim tratarBotoes As New Botoes
            Dim tratarCaixasTexto As New CaixaTexto
            Dim tratarTabela As New Tabela
            tratarTabela.inibir(True, dgvEmpresa)
            tratarCaixasTexto.inibir(False, txtNome)
            tratarBotoes.inibir(True, btnCadastrar, btnAtualizar, btnExcluir, btnSubir, btnDescer, btnFechar)
            PreencherTabela()
     End Sub

    ______________________________________________________________

    Private Sub PreencherTabela()
            Dim persistenciaEmpresa As New PersistenciaEmpresa
            persistenciaEmpresa.preencherDataGridView(dgvEmpresa)
    End Sub

    ______________________________________________________________

    Private Sub dgvEmpresa_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles dgvEmpresa.SelectionChanged
            If (dgvEmpresa.RowCount <> 0) Then
                PreencherCampos(dgvEmpresa.CurrentRow.Cells(1).Value.ToString())
            Else
                PreencherCampos("")
            End If
    End Sub

    ______________________________________________________________

    Private Sub PreencherCampos(descricao As String)
            txtNome.Text = descricao
    End Sub

    ______________________________________________________________

    este é o meu metodo que preenche o datagridview com meus registros do mysql:

    Private Const SQL_SELECIONAR_TODAS_EMPRESAS As String = "SELECT * FROM pes_pessoas WHERE PES_TIPO = ?Tipo ORDER BY PES_NOME;"

    Public Sub preencherDataGridView(dgv As DataGridView)
                Using CN As MySqlConnection = New MySqlConnection(ConfigurationManager.AppSettings("MySQLConnectionString"))
                    Using da As MySqlDataAdapter = New MySqlDataAdapter(SQL_SELECIONAR_TODAS_EMPRESAS, CN)
                        Dim dt As New DataTable
                        da.SelectCommand.Parameters.Add("Tipo", tipoMYSQL.Int16).Value = 2
                        da.Fill(dt)
                        dgv.DataSource = dt
                        dgv.Columns(0).HeaderText = "Código"
                        dgv.Columns(0).Name = "Codigo"
                        dgv.Columns(0).ReadOnly = True
                        dgv.Columns(0).Visible = False
                        dgv.Columns(1).HeaderText = "Nome"
                        dgv.Columns(1).Name = "Nome"
                        dgv.Columns(1).ReadOnly = True
                        dgv.Columns(2).HeaderText = "Empresa"
                        dgv.Columns(2).Name = "Empresa"
                        dgv.Columns(2).ReadOnly = True
                        dgv.Columns(2).Visible = False
                        dgv.Columns(3).HeaderText = "Tipo de Pessoa"
                        dgv.Columns(3).Name = "TipoPessoa"
                        dgv.Columns(3).ReadOnly = True
                        dgv.Columns(3).Visible = False
                    End Using
                End Using
    End Sub

    o que eu achei ainda + estranho é q tipo o meu formshow chama o evento preencher campos que o paramatro que ele recebeu de descricao veio do datagridview, ele pego o item selecionado e mando para o metodo, mas neste momento ele funcionou perfeitamente sem dar problemas

    dah uma força aew pessoal


    • Editado Junior-kun segunda-feira, 1 de abril de 2013 19:06
    quinta-feira, 28 de março de 2013 22:39

Todas as Respostas

  • Ola

    Eu não costumo codificar da forma que você esta fazendo eu tenho um outro padrão, mas olhando seu codigo percebi que no inicio você cria os objetos textboxs e button depois você chama o metodo PreencherTabela() e o de persistencia dentro do de persistencia você tem a variavel de conexão CN vocÊ declarou essa variavel ?

    Pois a mensagem de erro é referente a não instanciar objetos ou variaveis


    Junior

    sexta-feira, 29 de março de 2013 16:16
  • Então cara achei, pelo menos eu achei que a minha linha que do um using dela na mesma linha ele estivesse declarando-a:

    Using CN As MySqlConnection = New MySqlConnection(ConfigurationManager.AppSettings("MySQLConnectionString"))

    é que como eu disse eu tenho alguns projetos em C# e estou os aproveitando e adaptando para visual basic para aprender, achei que dessa forma iria funcionar, o meu problema que você falou de não instanciar o objeto se da no momento que tento fazer um insert, update ou delete, porque ele pega os valores do datagridview, nesse momento parece que o meu datagridview que não esta declarado, mas depois que ele gera a excepiton e eu tento uma segunda vez ele roda perfeitamente, acredito que o motivo seja porque depois que ele gerou a exception o datagridview  ganhou foco no primeiro registro dele, coisa que não acontece quando abre o form, para ser mais especifico ele ganhou foco quando foi chamado pela segunda vez o evento que o preenche com os dados do mysql, 

    sexta-feira, 29 de março de 2013 18:15
  • Bom Dia

    Pode ser esse o problema mesmo mas só uma pergunta você cria o gridview em run-time ?

    Agora se você não cria o gridview em run-time ou seja se ele ja esta no form mas quando você dispara uma ação e lhe retorna uma exception, pode ser que você tenha programado algum evento e o gridview nesse momento esteja vazio e gere uma exception mesmo se por acaso existir essa possibilidade faz um tratamento para para ver se a exception desaparece

    Espero ter ajudado


    Junior

    sábado, 30 de março de 2013 10:54
  • kra consegui resolve o problema, não da forma que gostaria de ter resolvido, mas resolvi, dexei os botões inibidos ateh  que o usuário selecione um item do datagridvew por conta propria, não queria resolver assim mas foi o jeito

    vlw aew a força

    segunda-feira, 1 de abril de 2013 19:06