none
Sugestões para um problema com o preenchimento de um datagridview RRS feed

  • Pergunta

  • Olá galera boa  tarde, estou com o seguinte problema:

    Tenho uma grid e ela está sendo preenchida pelo seguinte código:

            private void FillGrid_DGV()
            {

                string id_midia;

                DataTable midia = new DataTable();

                SqlCommand import = CreateCommand("SELECT ID_Midia2 FROM TB_Item_locação WHERE ID_Venda2 = " + txt_venda.Text);
                SqlDataAdapter adapt = new SqlDataAdapter(import);
                adapt.Fill(midia);

                id_midia = midia.Rows[RowNumber - 1]["ID_Midia2"].ToString();

                try
                {
                    DGV1.Rows.Clear();

                    tb_IL = new DataTable();

                    SqlCommand check = CreateCommand("SELECT a.Nome_Filme, b.Tipo, c.* FROM TB_Filme AS a, TB_Tipo_midia AS b, TB_Item_locação AS c WHERE a.ID_Filme1 = (SELECT ID_Filme4 FROM TB_Midia WHERE ID_Midia1 = "+ id_midia +") AND c.ID_Tipo3 = b.ID_Tipo1");// CÓDIGO DO CreateCommand ABAIXO
                    SqlDataAdapter adapter = new SqlDataAdapter(check);
                    adapter.Fill(tb_IL);
                    DGV1.Rows.Add();
                    if (tb_IL.Rows.Count > 0)
                    {
                        foreach (DataRow dr in tb_IL.Rows)
                        {
                            DGV1.Rows.Add(new object[] { dr["Nome_Filme"], dr["Tipo"], dr["ID_Midia2"], dr["Preço"], ((DateTime)dr["data_para_devolução"]).ToString("dd/MM/yyyy"), ((DateTime)dr["data_da_devolução"]).ToString("dd/MM/yyyy"), dr["Multa"], dr["ID_Item_locação1"]});
                        }
                    }
                    else
                    {
                        MessageBox.Show("Erro ao importar dados!");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    DGV1.Rows.Clear();
                }

            }

    // CÓDIGO DO CREATECOMMAND

            private SqlCommand CreateCommand(string Query)
            {
                return new SqlCommand(Query, Context);
            }

     

    O problema está quando eu executo a aplicação pois uma messagebox aparece dizendo que o valor inserido na coluna Midia não é um valor adequado, verifiquei o valor está tudo certo, menos Midia que não está sendo mostrada no grid e está dando erro.

     

    Alguma idéia?

     

    Obrigado de já

    segunda-feira, 7 de fevereiro de 2011 19:18

Todas as Respostas

  • Olá,

    Por favor, poste exatamente qual é a mensagem de erro que você está recebendo pra ficar mais fácil de te ajudar...


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    terça-feira, 15 de fevereiro de 2011 12:03
    Moderador
  • O erro é esse:

    The following exception occurred in the DataGridView:

    System.FormatException: DataGridViewComboBoxCell value is not valid.

    To replace this default dialog please handle the DataError event.

     

    Ele não me deixa passar o mouse sobre duas ComboBoxs da grid(Filme(nome do filme) e Tipo (tipo da midia:DVD, DVD-HD, Blue-reay) a terceira comobox Midia(o ID da midia filtrado pelas outras combobox) está funcionando normal) e já manda o erro mas agora ele está trazendo todos os dados, só não sei porque ele está acusando esse erro com as duas comboboxs, e se eu troco de linha no Grid ele também acusa o erro.

     

    PS: se estiver faltando mais alguma coisa é só dizer.

    • Editado Lubean quarta-feira, 16 de fevereiro de 2011 17:17 Falta de detalhes
    quarta-feira, 16 de fevereiro de 2011 17:09
  • Olá,

    Como você criou / populou essa sua coluna que é um ComboBox? Via código? Via designer?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 16 de fevereiro de 2011 17:14
    Moderador
  • Via designer
    quarta-feira, 16 de fevereiro de 2011 17:20
  • E como você está fazendo para setar a DataSource da sua ComboBoxColumn? Você precisa alimentar ela com dados vindos de algum lugar, senão não vai funcionar...
    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 16 de fevereiro de 2011 19:14
    Moderador
  • É assim que estou preenchendo as ComboBoxColumn:

    // COMBOBOXCOLUMN FILME

            private void Impor_filme()
            {
                tb_filme = new DataTable();

                SqlCommand Import = CreateCommand("SELECT * FROM TB_Filme");
                SqlDataAdapter adapter = new SqlDataAdapter(Import);
                adapter.Fill(tb_filme);

                DGV1.Rows.Add();
                column_filme.DataSource = tb_filme;
                column_filme.DisplayMember = "Nome_Filme";
                column_filme.ValueMember = "ID_Filme1";
            }

    // COMBOBOXCOLUMN TIPO

            private void Import_Tipo()
            {
                DataTable TB_tipo = new DataTable();

                SqlCommand import = CreateCommand("SELECT * FROM TB_Tipo_midia");
                SqlDataAdapter adapter = new SqlDataAdapter(import);
                adapter.Fill(TB_tipo);

                column_tipo.DataSource = TB_tipo;
                column_tipo.DisplayMember = "Tipo";
                column_tipo.ValueMember = "ID_Tipo1";
            }

    //COMBOBOXCOLUMN MIDIA

            private void Import_midia()
            {
                tb_midia = new DataTable();

                SqlCommand import = CreateCommand("SELECT ID_Midia1 FROM TB_Midia WHERE ID_Filme4 = "+ DGV1.Rows[RowNumber -1].Cells[0].Value +" AND ID_Tipo2 = "+ DGV1.Rows[RowNumber-1].Cells[1].Value +" AND ID_Midia_status2 = " + txt_status);
                SqlDataAdapter Adapter = new SqlDataAdapter(import);
                Adapter.Fill(tb_midia);

                column_id_midia.DataSource = tb_midia;
                column_id_midia.DisplayMember = "ID_Midia1";
                column_id_midia.ValueMember = "ID_Midia1";
            }

     

    OBS: Onde DGV1 é o meu DataGridView, txt_status é um valor que pego de um select feito na tabela TB_Midia_status. O Import_midia() é chamado dentro do DataGridView_CellValueChanged, onde filtro o ID da midia de acordo com o ID do filme e o ID do tipo da midia(ou  ID do tipo).

    quinta-feira, 17 de fevereiro de 2011 18:49