Usuário com melhor resposta
CADASTRO C# + ACCESS ( DÚVIDA )

Pergunta
-
Bom dia,
Estou criando um sistema de cadastro em C# (Windows Forms) + Access (.mdb)
Estou passando pelo seguinte problema;
// BUSCO O VALOR NA COMBOBOX QUE ESTÁ LISTANDO ITEMS DE OUTRA TABELA. cmdQry.Parameters.Add("@Tipo", OleDbType.Char, 50).Value = cbTipo.SelectedItem;
Porém ao tentar concluir o registro, o seguinte erro é retornado:
Falha ao converter valor de parâmetro de DataRowView em String.
Estranho, que no mesmo formulário tenho outra combobox, porém com items carregados diretamente no 'Load' do formulário, e ela cadastra normalmente. A outra que está mostrando valores de uma outra tabela ocorre esse erro.
Alguém pode me ajudar?
Respostas
-
Boa noite amigo,
Cadastrou, porém quando fui consultar na tabela do banco, onde está o campo do Fabricante referente à combobox em assunto. Foi registrado o seguinte valor.
System.Data.DataRowView ??
Olá amigo, isso acontece porque o SelectedItem é um DataRowView, você provavelmente o populou com um DataTable.
Para isso, devemos setar um ValueMember e um DisplayMember para o ComboBox, e depois resgatar um desses valores (faz mais sentido pegar o ValueMember)
Ex:comboBox1.ValueMember = "Nome"; comboBox1.DisplayMember = "Idade";
MessageBox.Show(comboBox1.SelectedValue.ToString());
Caso você popule seu Combo através de combo.Items.Add(object) você consegue pegar pelo SelectedItem sem probleamas. Ex:
comboBox1.Items.Add("Teste"); MessageBox.Show(comboBox1.SelectedItem.ToString());
Abraços!
- Marcado como Resposta Guilherme Zaramella segunda-feira, 19 de maio de 2014 18:34
Todas as Respostas
-
Tenta colocar :
comboBox.SelecteIçtem.ToString();
Abraço
- Editado Vinícius Rafael Tavares sábado, 17 de maio de 2014 14:30
-
-
Boa noite amigo,
Cadastrou, porém quando fui consultar na tabela do banco, onde está o campo do Fabricante referente à combobox em assunto. Foi registrado o seguinte valor.
System.Data.DataRowView ??
Olá amigo, isso acontece porque o SelectedItem é um DataRowView, você provavelmente o populou com um DataTable.
Para isso, devemos setar um ValueMember e um DisplayMember para o ComboBox, e depois resgatar um desses valores (faz mais sentido pegar o ValueMember)
Ex:comboBox1.ValueMember = "Nome"; comboBox1.DisplayMember = "Idade";
MessageBox.Show(comboBox1.SelectedValue.ToString());
Caso você popule seu Combo através de combo.Items.Add(object) você consegue pegar pelo SelectedItem sem probleamas. Ex:
comboBox1.Items.Add("Teste"); MessageBox.Show(comboBox1.SelectedItem.ToString());
Abraços!
- Marcado como Resposta Guilherme Zaramella segunda-feira, 19 de maio de 2014 18:34
-
Boa tarde amigo,
Veja um exemplo de como está ficando no banco de dados:
E na hora de realizar o cadastro, estou usando uma função "funCadVeiculo()";
Como devo setar as propriedades do combobox nessa função, para o banco de dados receber o valor do item selecionado, ao invés de "System.Data.DataRowView".
// Tentei dessa forma, porém obtive o mesmo resultado. cmdQry.Parameters.Add("@Fabricante", OleDbType.LongVarChar, 50).Value = cbFabricante.SelectedValue.ToString();
Obrigado pela ajuda.
Abraços.
-
Como está o ValueMember do seu Combo Box? E o DisplayMember?
Seu ValueMember tem que ser o nome da coluna que você quer mandar pro banco de dados, que no caso é o fabricante.Tira printa do ValueMember do Combo Box com um breakpoint em cima
-