none
CADASTRO C# + ACCESS ( DÚVIDA ) RRS feed

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

    sábado, 17 de maio de 2014 12:43

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!

    domingo, 18 de maio de 2014 01:10

Todas as Respostas

  • Tenta colocar :

    comboBox.SelecteIçtem.ToString();
    Abraço

    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 ??

    sábado, 17 de maio de 2014 21:01
  • 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!

    domingo, 18 de maio de 2014 01:10
  • 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.

    domingo, 18 de maio de 2014 17:37
  • 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

    segunda-feira, 19 de maio de 2014 00:49
  • Boa tarde amigo,

    Finalmente consegui!

    Na função que carrega os dados do ComboBox no formulário eu acrescentei a seguinte informação:

    // Incluído na função do ComboBox.
    cbFabricante.ValueMember = "Fabricante";
    Muito obrigado pela ajuda.

    segunda-feira, 19 de maio de 2014 18:34