在GridView

时间:2016-05-25 15:25:13

标签: c# asp.net gridview

我正在创建一个购物车。我有一个包含所有产品的GridView,我有一个更新按钮,当点击时,我想获取价格列中的值,并将其与数量TextBox中的输入值相乘,并将其显示在ItemTotal标签中。我对lblPrice的SQL输入是十进制形式,但它在gridview上显示为$ _。00。我一直在为lblPrice遇到格式异常。我想知道是否有办法让lblPrice转换回小数但仍然在gridview上显示它的价格?

ShoppingCart.aspx

<asp:TemplateField HeaderText="Price">
    <ItemTemplate>
        <asp:Label ID="lblPrice" runat="server" Text='<%# Bind("Price")%>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
    <ItemTemplate>
        <asp:TextBox ID="txtQuantity" runat="server"></asp:TextBox>
        <asp:CompareValidator runat="server" Operator="DataTypeCheck" Type="Integer"
        ControlToValidate="txtQuantity" ErrorMessage="Value must be a whole number" ForeColor="Red" />
    </ItemTemplate>
</asp:TemplateField>

ShoppingCart.aspx.cs

protected void btnUpdate_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in gvProductsList.Rows)
    {
        double lblPrice = Convert.ToDouble(((Label)row.FindControl("lblPrice") as Label).Text);//convert value of lbl to double
        int txtQuantity = int.Parse(((TextBox)row.FindControl("txtQuantity") as TextBox).Text);//convert value of textbox to int
        Label lblItemTotal = (row.FindControl("lblItemTotal")) as Label;//find lblItemTotal label in each row
        lblItemTotal.Text = Convert.ToString(lblPrice * txtQuantity);
    }
}

1 个答案:

答案 0 :(得分:0)

在评论中进行了一些讨论后,我们发现问题出在这一行:

double lblPrice = Convert.ToDouble(((Label)row.FindControl("lblPrice") as Label).Text);

标签的价值大约是3.00美元。转换为双精灵失败了。这是因为该字符串包含一个美元符号,该符号不是有效数字。

您可以做的是通过Parse方法将其转换回小数,并传入相应的NumberStyle - 在这种情况下为货币。

Label lblPrice = (Label)row.FindControl("lblPrice");
decimal price = decimal.Parse(lblPrice.Text, NumberStyles.Currency);

您可能需要查看TryParse,以便更好地处理错误。

确保包含Globalization命名空间以使用NumberStyles。

using System.Globalization;