VB.NET GridView игнорирует нулевые значения в итоговом колонтитуле

ВБ.нет

Protected Sub monthlyReportsUK_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

If e.Row.RowType = DataControlRowType.DataRow Then
   Dim rowTotal As Decimal = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "webShopTotal").ToString)
   grdTotal = grdTotal + rowTotal
End If

If e.Row.RowType = DataControlRowType.Footer Then
   Dim lbl As Label = DirectCast(e.Row.FindControl("lblwebsVal"), Label)
   lbl.Text = "£" + grdTotal.ToString("##,0.00")
End If

End Sub

HTML:

<asp:TemplateField HeaderText="webShopTotal">
<ItemTemplate>
    <asp:Label ID="lblamount" runat="Server" Text='<%# Eval("webShopTotal") %>' />
</ItemTemplate>
<FooterTemplate>
    <asp:Label ID="lblwebsVal" runat="server"></asp:Label>
</FooterTemplate>
</asp:TemplateField>

Вид сетки

Month   Value
Jan     NULL
Feb     NULL
Mar     15.00
Apr     10.00

Я хочу иметь возможность суммировать значения:

   Month   Value
    Jan     NULL
    Feb     NULL
    Mar     15.00
    Apr     10.00
   Total    25.00

Однако я получаю сообщение об ошибке Object cannot be cast from DBNull to other types.

Есть ли способ добавить итог в нижний колонтитул, игнорируя значения NULL?


person neeko    schedule 10.02.2014    source источник


Ответы (1)


Попробуй это

Protected Sub monthlyReportsUK_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

If e.Row.RowType = DataControlRowType.DataRow Then    
 If DataBinder.Eval(e.Row.DataItem, "webShopTotal").ToString IsNot Nothing AndAlso DataBinder.Eval(e.Row.DataItem, "webShopTotal").ToString IsNot DbNull.Value Then
   Dim rowTotal As Decimal = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "webShopTotal").ToString)
   grdTotal = grdTotal + rowTotal
 End Id
End If

If e.Row.RowType = DataControlRowType.Footer Then
   Dim lbl As Label = DirectCast(e.Row.FindControl("lblwebsVal"), Label)
   lbl.Text = "£" + grdTotal.ToString("##,0.00")
End If

End Sub

Изменить

Во-первых, всегда следует использовать System.Decimal.TryParse() вместо Convert.ToDecimal()

Dim result  = 0
Dim rowTotal As Decimal = Decimal.TryParse(DataBinder.Eval(e.Row.DataItem, "webShopTotal").ToString), out result)
person Vignesh Kumar A    schedule 10.02.2014
comment
спасибо за помощь, но я получаю ошибку Input string was not in a correct format. - person neeko; 10.02.2014
comment
ссылаясь на Dim rowTotal As Decimal = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "webShopTotal").ToString - person neeko; 10.02.2014
comment
Используйте Decimal.TryParse(value, out number) вместо Convert.ToDecimal - person Vignesh Kumar A; 10.02.2014