Inquiridor
visual basic e windows forms [RESOLVIDO]

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 Subo 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
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
-
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,
-
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
-
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