Usuário com melhor resposta
GridView exibir valores nulos

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
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,
LeandroSe foi útil, marque como útil ou como resposta.
- Sugerido como Resposta Leandro Tozetto quinta-feira, 6 de junho de 2013 23:25
- Marcado como Resposta welington jrModerator segunda-feira, 5 de março de 2018 11:39
-
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,
LeandroSe foi útil, marque como útil ou como resposta.
- Editado Leandro Tozetto segunda-feira, 10 de junho de 2013 02:09 Formatação
- Sugerido como Resposta Leandro Tozetto segunda-feira, 10 de junho de 2013 02:09
- Marcado como Resposta welington jrModerator segunda-feira, 5 de março de 2018 11:39
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
-
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,
LeandroSe foi útil, marque como útil ou como resposta.
- Sugerido como Resposta Leandro Tozetto quinta-feira, 6 de junho de 2013 23:25
- Marcado como Resposta welington jrModerator segunda-feira, 5 de março de 2018 11:39
-
-
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,
LeandroSe foi útil, marque como útil ou como resposta.
- Editado Leandro Tozetto segunda-feira, 10 de junho de 2013 02:09 Formatação
- Sugerido como Resposta Leandro Tozetto segunda-feira, 10 de junho de 2013 02:09
- Marcado como Resposta welington jrModerator segunda-feira, 5 de março de 2018 11:39