Usuário com melhor resposta
Levando dados de DataGrid para um WinForm

Pergunta
-
Pessoal estou com um problema chato de se achar, mas creio que alguém possa matá-lo facilmente.
Tenho dois forms, um que faz um cadastro e outro que é um localizar, o cara digita alguma letra no campo de busca e ele já abre uma grid com os resultado conforme vai escrevendo, até ai beleza.O problema é que eu fiz para que quando ele clicasse duas vezes no campo onde esta a grid ele leve esses dados para o formulário.
Esta dando um erro de conversão de dados (A conversão do tipo 'DBNull' no tipo 'String' não é válida.) quando ele tenta levar os dados da grid para o formuláriod e cadastro, segue um trexo de código de cada form.OBS: Os campos no BD estão todos como Texto. Esta tudo na ordem.
//Este serve para quando a pessoa digitar alguma coisa no campo de busca e popula a grid
Private Sub txtCampo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCampo.TextChanged
dgdGrade.DataSource = objCunsulta.Popular_Grade(txtCampo.Text)
lblqtd.Text = dgdGrade.Rows.Count - 1End Sub
//Aqui são os dados que estão na grid
Private Sub dgdGrade_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgdGrade.CellDoubleClick
If qualtela = 1 Then
frmCadastro.Show()frmCadastro.txtCodigo.Text = dgdGrade.CurrentRow.Cells(0).Value
frmCadastro.txtEmpresa.Text = dgdGrade.CurrentRow.Cells(1).Value
frmCadastro.txtContato.Text = dgdGrade.CurrentRow.Cells(2).Value
frmCadastro.mskTelefone.Text = dgdGrade.CurrentRow.Cells(3).Value
frmCadastro.mskCelular.Text = dgdGrade.CurrentRow.Cells(4).Value
frmCadastro.txtCargo.Text = dgdGrade.CurrentRow.Cells(5).Value
frmCadastro.txtEndereco.Text = dgdGrade.CurrentRow.Cells(6).Value
frmCadastro.txtCep.Text = dgdGrade.CurrentRow.Cells(7).Value
frmCadastro.mskFax.Text = dgdGrade.CurrentRow.Cells(8).Value
frmCadastro.txtEmail.Text = dgdGrade.CurrentRow.Cells(9).Value
frmCadastro.txtEmailAdicional.Text = dgdGrade.CurrentRow.Cells(10).Value
frmCadastro.txtInf.Text = dgdGrade.CurrentRow.Cells(11).ValueElseIf qualtela = 2 Then
Dispose()
End If
End Sub
Na grid eu criei uma coluna para cada campo e referenciei ao campo no bando de dados, assim fica tudo no esquema.
Qualquer ajuda é bem vinda.
Abraço a todos.Maciel
- Movido Ari C. RaimundoModerator sábado, 27 de novembro de 2010 00:21 Movido para fórum apropriado (De:.NET Development - Geral)
Respostas
-
Você pode chamar o método Activate do Form que você quer colocar em foco.
Veja:
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.activate.aspx
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Maciel Alves sexta-feira, 26 de novembro de 2010 16:31
Todas as Respostas
-
Maciel,
Isto acontece porque um dos campos está vazio, você pode resolver este problema usando o Convert.ToString, tipo:
frmCadastro.txtCodigo.Text = Convert.ToString(dgdGrade.CurrentRow.Cells(0).Value)
Mais:
http://msdn.microsoft.com/en-us/library/system.convert.tostring.aspx
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono) -
-
Você pode chamar o método Activate do Form que você quer colocar em foco.
Veja:
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.activate.aspx
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Maciel Alves sexta-feira, 26 de novembro de 2010 16:31
-
Você pode passar os dados do grid para o form desta forma tb!
Seu_Form passarBusca = new Seu_Form ();
{
passarBusca.txtProduto.Text = gridPesquisaProdutos.CurrentRow.Cells["NOME"].Value.ToString();
passarBusca.txtValor_Unitario.Text = gridPesquisaProdutos.CurrentRow.Cells["PRECO_CONSUMIDOR"].Value.ToString();
passarBusca.Show();
}