none
GridView exibir valores nulos RRS feed

  • Pergunta

  • Olá
    Tenho uma GridView que recebe valores do BD, porém um dos campos é uma data e está nulo e só será preenchido depois que o camarada pagar o valor, este campo é uma data de pagamento. Na função que executa o select e preencha uma lista com os objetos selecionados eu converto a data para DateTime, mas na hora de mostrar os valores é mostrado o seguinte erro:
    Objeto não pode ser convertido de DBNull em outros tipos.
    A minha classe está assim:

    ComandoMySQL.CommandText = @"select mens_cod, alu_cod, mens_data_venc, mens_valor, mens_data_pag from mensalidade where alu_cod = @alu_cod";
                ComandoMySQL.Parameters.AddWithValue("@alu_cod", alu_cod);
                DataTable dt = ExecutaSelect();
                List<Mensalidade> mensalidade = new List<Mensalidade>();
                foreach (DataRow dr in dt.Rows)
                {
                    Mensalidade m = new Mensalidade
                    {
                        Mens_cod = Convert.ToInt32(dr["mens_cod"]),
                        Alu_cod = Convert.ToInt32(dr["alu_cod"]),
                        Mens_data_venc = Convert.ToDateTime(dr["mens_data_venc"]),
                        Mens_valor = Convert.ToDecimal(dr["mens_valor"]),
                        Mens_data_pag = Convert.ToDateTime(dr["mens_data_pag"])
                    };
                    mensalidade.Add(m); ;
    
                }
                return mensalidade;



    Edinho

    quinta-feira, 6 de junho de 2013 19:24

Respostas

  • Edinho,

    Boa noite!

    Para evitar este tipo de problema, quando você utilizar o DataTable ou DataReader, e os mesmos representarem colunas quem possam assumir o valor null, é interessante verificar se o campo é nulo antes de converter, você pode fazer isto assim:

    dr["mens_data_pag"] != DBNull.Value ? Convert.ToDateTime(dr["mens_data_pag"]): DateTime.MinValue


    Att,
    Leandro

    Se foi útil, marque como útil ou como resposta.

    quinta-feira, 6 de junho de 2013 23:25
  • Edinho,

    Boa noite!

    Tem sim, cria a coluna da data de pagamento assim:

                <asp:TemplateField HeaderText="Data Pagamento">
                    <HeaderStyle Width="120px" />
                    <ItemStyle HorizontalAlign="Center" />                
                    <ItemTemplate>
                    <asp:Label ID="lblDataPagamento" runat="server" Text='<%# Convert.ToDateTime(Eval("mens_data_pag")) == DateTime.MinValue ? String.Empty : Eval("NomeProduto")%>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>


    Att,
    Leandro

    Se foi útil, marque como útil ou como resposta.


    segunda-feira, 10 de junho de 2013 01:28

Todas as Respostas

  • Faz um if no LINQ

    .DataAberturaAtendimento = If(CStr(rcp.DataAberturaAtendimento) IsNot Nothing, rcp.DataAberturaAtendimento, Nothing),

    E na grid transforma em String

    gridItem.Column("DataAtendimento", header:="Data de Abertura", Format:=@@<text>@(String.Format("{0:dd/MM/yyyy}", item("DataAbertura")))</text>),


    Paulo Marcelo Dalbosco

    quinta-feira, 6 de junho de 2013 20:16
  • Edinho,

    Boa noite!

    Para evitar este tipo de problema, quando você utilizar o DataTable ou DataReader, e os mesmos representarem colunas quem possam assumir o valor null, é interessante verificar se o campo é nulo antes de converter, você pode fazer isto assim:

    dr["mens_data_pag"] != DBNull.Value ? Convert.ToDateTime(dr["mens_data_pag"]): DateTime.MinValue


    Att,
    Leandro

    Se foi útil, marque como útil ou como resposta.

    quinta-feira, 6 de junho de 2013 23:25
  • Bom dia Leandro

    Deu certo, porém ele mostra na grid o MinValue da data, teria como mostrar o campo na grid em branco. Pq depois que o camarada pagar eu vou atualizar esse campo com a data do pagamento???


    Edinho

    sexta-feira, 7 de junho de 2013 11:07
  • Edinho,

    Boa noite!

    Tem sim, cria a coluna da data de pagamento assim:

                <asp:TemplateField HeaderText="Data Pagamento">
                    <HeaderStyle Width="120px" />
                    <ItemStyle HorizontalAlign="Center" />                
                    <ItemTemplate>
                    <asp:Label ID="lblDataPagamento" runat="server" Text='<%# Convert.ToDateTime(Eval("mens_data_pag")) == DateTime.MinValue ? String.Empty : Eval("NomeProduto")%>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>


    Att,
    Leandro

    Se foi útil, marque como útil ou como resposta.


    segunda-feira, 10 de junho de 2013 01:28