2016-05-25 3 views
1

Я создаю корзину покупок. У меня есть GridView со всеми моими продуктами, и у меня есть кнопка обновления, которая при щелчке я хочу взять значения в столбце цены и умножить ее на входные значения в количестве TextBox и отобразить их в ItemTotal Label. Мои входы SQL для lblPrice находятся в десятичной форме и, однако, отображаются в gridview как $ _. 00. Я продолжаю работать в формате Exception для lblPrice. Мне было интересно, есть ли у меня способ конвертировать lblPrice обратно в десятичную, но все же он отображается как цена на gridview?Установить двойной как ярлык в 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

Я получаю System.FormatException, заявляя, что «строка ввода не была в правильном формате». для двойной строки lblPrice = Convert.ToDouble (((Ярлык). FindControl («lblPrice») в качестве метки) .Text); – Jamie

+0

Что такое примерное значение для этой метки, 'lblPrice'? –

ответ

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 вместо этого, для лучшей обработки ошибок.

Обязательно укажите пространство имен глобализации, чтобы использовать NumberStyles.

using System.Globalization;   
+0

Я пробовал это, и я получаю сообщение об ошибке, когда NumberStyles не существует в этом контексте – Jamie

+0

@J amie затем добавьте пространство имен ['System.Globalization'] (https://msdn.microsoft.com/en-us/library/system.globalization.numberstyles (v = vs.110) .aspx) в ваш .cs-файл:' используя System.Globalization; ' –

+0

Спасибо, Фам. Да, обязательно добавьте пространство имен глобализации. Я обновил свой ответ, чтобы включить эту информацию. –

Смежные вопросы