[英]Error with adding values of 3 label controls to output result in another label control
這是我想要實現的目標的完整描述。
我設計它的方式是我有
在頁面加載時,DropDown 將被禁用,單價標簽的值分別為“100”、“200”和“100”,3 個小計標簽的初始值為“0”,GrandTotal 標簽將為“0” .
當用戶單擊任何一個復選框時,將啟用附加到該單擊復選框的下拉列表,當用戶從下拉列表中選擇數量時,單價標簽的值將乘以數量下拉列表中的值,並在 SubTotal 中輸出結果標簽。
最后,將SubTotal Labels 的所有值相加,結果將顯示在GrandTotal Label 中。
這是視圖的樣子
Product Unit Price Quantity SubTotal GrandTotal
Product1 100 3 300
Product2 200 1 200
Product3 100 2 200
700
這是我的代碼(請原諒我顯示代碼的方式。我嘗試上傳我的代碼但它沒有進入代碼窗口,因為我正在使用移動設備提出這個問題)
protected void Page_Load(object sender, EventArgs e)
{
unitprice1.Text = ("100").ToString();
unitprice2.Text = ("200").ToString();
unitprice3.Text = ("100").ToString();
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
Product1DropDown.Enabled = CheckBox1.Checked;
Subtotal1.Text = ("0").ToString();
}
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
Product2DropDown.Enabled = CheckBox2.Checked;
Subtotal2.Text = ("0").ToString();
}
protected void CheckBox3_CheckedChanged(object sender, EventArgs e)
{
Product3DropDown.Enabled = CheckBox3.Checked;
Subtotal3.Text = ("0").ToString();
}
protected void Product1DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
if (Product1DropDown.SelectedIndex > 0)
{
Qty1.Text = Product1DropDown.SelectedItem.Text;
Subtotal1.Text = Convert.ToString(Convert.ToInt32(Qty1.Text) * Convert.ToInt32(unitprice1.Text)).ToString();
}
}
protected void Product2DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
if (Product2DropDown.SelectedIndex > 0)
{
Qty2.Text = Product2DropDown.SelectedItem.Text;
Subtotal2.Text = Convert.ToString(Convert.ToInt32(Qty2.Text) * Convert.ToInt32(unitprice2.Text)).ToString();
}
}
protected void Product3DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
if(Product3DropDown.SelectedIndex > 0)
{
Qty3.Text = Product3DropDown.SelectedItem.Text;Subtotal3.Text = Convert.ToString(Convert.ToInt32(Qty3.Text) * Convert.ToInt32(unitprice3.Text)).ToString();
}
}
確保您已為每個CheckBox
包含AutoPostBack="true"
:
<asp:CheckBox ID="checkBox1" runat="server" Checked="false" OnCheckedChanged="checkBox1_CheckedChanged" AutoPostBack="true" />
以及每個DropDownList
:
<asp:DropDownList id="product1DropDown" runat="server" OnSelectedIndexChanged="product1DropDown_SelectedIndexChanged" AutoPostBack="true" Enabled="false" style="align-content:center;width: 75px" />
創建一個方法來計算小計。 由於我們必須計算 3 種不同產品的小計,因此我們將創建一個方法。 參數將是 DropDownList 中的數量和標簽中的單價。
private decimal CalculateSubtotal(string strQty, string strUnitPrice)
{
int qty = 0;
decimal unitPrice = 0m;
decimal subtotal = 0m;
//clear msg
lblMsg.Text = string.Empty;
if (!String.IsNullOrEmpty(strQty))
{
//try to convert
Int32.TryParse(strQty, out qty);
}
else
{
throw new Exception("Error: Qty is null or empty");
}
if (!String.IsNullOrEmpty(strUnitPrice))
{
//try to convert
Decimal.TryParse(strUnitPrice, out unitPrice);
//calculate
subtotal = qty * unitPrice;
}
else
{
throw new Exception("Error: UnitPrice is null or empty");
}
return subtotal;
}
接下來,創建一個計算總計的方法。 此方法將為每個產品調用CalculateSubtotal
。
計算GrandTotal
private void CalculateGrandTotal()
{
decimal subtotal1 = 0m; //use 'm' for decimal
decimal subtotal2 = 0m; //use 'm' for decimal
decimal subtotal3 = 0m; //use 'm' for decimal
//calculate subtotal1 - only calculate if CheckBox is enabled
if (checkBox1.Enabled && !String.IsNullOrEmpty(product1DropDown.Text))
{
//calculate subtotal
subtotal1 = CalculateSubtotal(product1DropDown.Text, lblProduct1UnitPrice.Text);
}
//set value
lblProduct1Subtotal.Text = subtotal1.ToString("$###,##0.00");
//calculate subtotal 2 - only calculate if CheckBox is enabled
if (checkBox2.Enabled && !String.IsNullOrEmpty(product2DropDown.Text))
{
//calculate subtotal
subtotal2 = CalculateSubtotal(product2DropDown.Text, lblProduct2UnitPrice.Text);
}
//set value
lblProduct2Subtotal.Text = subtotal2.ToString("$###,##0.00");
//calculate subtotal3 - only calculate if CheckBox is enabled
if (checkBox3.Enabled && !String.IsNullOrEmpty(product3DropDown.Text))
{
//calculate subtotal
subtotal3 = CalculateSubtotal(product3DropDown.Text, lblProduct3UnitPrice.Text);
}
//set value
lblProduct3Subtotal.Text = subtotal3.ToString("$###,##0.00");
//calculate
decimal grandTotal = subtotal1 + subtotal2 + subtotal3;
//set value
lblGrandTotal.Text = grandTotal.ToString("$###,##0.00");
}
在每個 CheckBox CheckChanged
事件處理程序中,我們不僅需要判斷是否啟用下拉,還需要重新計算總計。 如果復選框被禁用,我還決定將數量和小計重置為 0。
例如:
protected void checkBox1_CheckedChanged(object sender, EventArgs e)
{
////uncomment for debugging
//lblMsg.Text = "Info: checkBox1.Checked: " + checkBox1.Checked.ToString();
//System.Diagnostics.Debug.WriteLine("Info: checkBox1.Checked: " + checkBox1.Checked.ToString());
//set value
product1DropDown.Enabled = checkBox1.Checked;
if (!product1DropDown.Enabled)
{
//not enabled - reset values
product1DropDown.Text = string.Empty;
lblProduct1Subtotal.Text = "$0.00";
}
//calculate
CalculateGrandTotal();
}
由於每次更改數量時都需要重新計算總計以及該特定產品的小計,因此我們只需調用CalculateGrandTotal();
.
例如:
protected void product1DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
CalculateGrandTotal();
}
這是完整的解決方案 - 它已經過測試:
VS 2019 :
創建新的ASP.NET Web 應用程序 (.NET Framework)
添加網頁表單
默認.aspx :
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="TestAspNetDU._default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="top: 10px; left: 150px; position: absolute;">
<asp:Table ID="tbl1" BorderStyle="none" Border="0px" CellPadding="2" CellSpacing="0" runat="server" Width="410">
<asp:TableHeaderRow ID="tbl1HeaderRow">
<asp:TableHeaderCell ID="tbl1CheckBoxHeading" Text="" style="text-align:center" />
<asp:TableHeaderCell ID="tbl1ProductHeading" Text="Product" style="text-align:center" />
<asp:TableHeaderCell ID="tbl1UnitPriceHeading" Text="Unit Price" style="text-align:center" />
<asp:TableHeaderCell ID="tbl1QuantityHeading" Text="Quantity" style="text-align:center" />
<asp:TableHeaderCell ID="tbl1SubtotalHeading" Text="Subtotal" style="text-align:center" />
</asp:TableHeaderRow>
<asp:TableRow ID="tbl1Row1">
<asp:TableCell Width="35px" style="align-content:center;text-align:center;vertical-align:middle">
<asp:CheckBox ID="checkBox1" runat="server" Checked="false" OnCheckedChanged="checkBox1_CheckedChanged" AutoPostBack="true" />
</asp:TableCell>
<asp:TableCell Width="100px" style="text-align:left">
<asp:Label id="lblProduct1Name" runat="server" Text="Product1" style="text-align:left" />
</asp:TableCell>
<asp:TableCell Width="75px" style="align-content:center;text-align:center">
<asp:Label id="lblProduct1UnitPrice" runat="server" Text="100" />
</asp:TableCell>
<asp:TableCell Width="100px" style="align-content:center;text-align:center">
<asp:DropDownList id="product1DropDown" runat="server" OnSelectedIndexChanged="product1DropDown_SelectedIndexChanged" AutoPostBack="true" Enabled="false" style="align-content:center;width: 75px" />
</asp:TableCell>
<asp:TableCell Width="100px" style="text-align:right">
<asp:Label id="lblProduct1Subtotal" runat="server" Text="0.00" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="tbl1Row2">
<asp:TableCell Width="35px" style="align-content:center;text-align:center;vertical-align:middle">
<asp:CheckBox ID="checkBox2" runat="server" Checked="false" OnCheckedChanged="checkBox2_CheckedChanged" AutoPostBack="true" />
</asp:TableCell>
<asp:TableCell Width="100px" style="text-align:left">
<asp:Label id="lblProduct2Name" runat="server" Text="Product2" style="text-align:left" />
</asp:TableCell>
<asp:TableCell Width="75px" style="align-content:center;text-align:center">
<asp:Label id="lblProduct2UnitPrice" runat="server" Text="200" style="text-align:center" />
</asp:TableCell>
<asp:TableCell Width="100" style="align-content:center;text-align:center">
<asp:DropDownList id="product2DropDown" runat="server" OnSelectedIndexChanged="product2DropDown_SelectedIndexChanged" AutoPostBack="true" Enabled="false" style="align-content:center;width: 75px" />
</asp:TableCell>
<asp:TableCell Width="100px" style="text-align:right">
<asp:Label id="lblProduct2Subtotal" runat="server" Text="0.00" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="tbl1Row3">
<asp:TableCell Width="35px" style="align-content:center;text-align:center;vertical-align:middle">
<asp:CheckBox ID="checkBox3" runat="server" Checked="false" OnCheckedChanged="checkBox3_CheckedChanged" AutoPostBack="true" />
</asp:TableCell>
<asp:TableCell Width="100px" style="text-align:left">
<asp:Label id="lblProduct3Name" runat="server" Text="Product3" style="text-align:left" />
</asp:TableCell>
<asp:TableCell Width="75px" style="align-content:center;text-align:center">
<asp:Label id="lblProduct3UnitPrice" runat="server" Text="100" style="text-align:center" />
</asp:TableCell>
<asp:TableCell Width="100" style="align-content:center;text-align:center">
<asp:DropDownList id="product3DropDown" runat="server" OnSelectedIndexChanged="product3DropDown_SelectedIndexChanged" AutoPostBack="true" Enabled="false" style="align-content:center;width: 75px" />
</asp:TableCell>
<asp:TableCell Width="100px" style="text-align:right">
<asp:Label id="lblProduct3Subtotal" runat="server" Text="0.00" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</div>
<div style="top: 120px; left: 150px; position: absolute">
<asp:Table ID="tbl1GrandTotal" BorderStyle="none" Border="0px" CellPadding="0" CellSpacing="0" runat="server" Width="410">
<asp:TableRow ID="tbl1GrandTotalRow">
<asp:TableCell Width="160px" style="align-content:center;text-align:center;vertical-align:middle"></asp:TableCell>
<asp:TableCell Width="125px" style="font-weight:bold; text-align:center">
<asp:Label id="lblGrandTotalHeading" runat="server" Text="Grand Total:" />
</asp:TableCell>
<asp:TableCell Width="100px" style="font-weight:bold; text-align:right">
<asp:Label id="lblGrandTotal" runat="server" Text="0.00" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</div>
<div style="top: 625px; left: 150px; position: absolute">
<span style="color:red">
<asp:Label ID="lblMsg" runat="server" Text="" />
</span>
</div>
</form>
</body>
</html>
默認.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace TestAspNetDU
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//set values
lblProduct1UnitPrice.Text = "100";
lblProduct2UnitPrice.Text = "200";
lblProduct3UnitPrice.Text = "100";
//populate DropDownList
for(int i = 0; i < 100; i++)
{
if (i > 0)
{
//add
product1DropDown.Items.Add(i.ToString());
product2DropDown.Items.Add(i.ToString());
product3DropDown.Items.Add(i.ToString());
}
else
{
//add - for 0, show empty (blank)
product1DropDown.Items.Add("");
product2DropDown.Items.Add("");
product3DropDown.Items.Add("");
}
}
}
private void CalculateGrandTotal()
{
decimal subtotal1 = 0m; //use 'm' for decimal
decimal subtotal2 = 0m; //use 'm' for decimal
decimal subtotal3 = 0m; //use 'm' for decimal
try
{
//calculate subtotal1 - only calculate if CheckBox is enabled
if (checkBox1.Enabled && !String.IsNullOrEmpty(product1DropDown.Text))
{
//calculate subtotal
subtotal1 = CalculateSubtotal(product1DropDown.Text, lblProduct1UnitPrice.Text);
}
//set value
lblProduct1Subtotal.Text = subtotal1.ToString("$###,##0.00");
}
catch(Exception ex)
{
//ToDo: log msg
//set value
lblMsg.Text = "Error (CalculateGrandTotal 1) - " + ex.Message;
//uncommenting the following line may be useful for debugging
//throw ex;
}
try
{
//calculate subtotal 2 - only calculate if CheckBox is enabled
if (checkBox2.Enabled && !String.IsNullOrEmpty(product2DropDown.Text))
{
//calculate subtotal
subtotal2 = CalculateSubtotal(product2DropDown.Text, lblProduct2UnitPrice.Text);
}
//set value
lblProduct2Subtotal.Text = subtotal2.ToString("$###,##0.00");
}
catch(Exception ex)
{
//ToDo: log msg
//set value
lblMsg.Text = "Error (CalculateGrandTotal 2) - " + ex.Message;
//uncommenting the following line may be useful for debugging
//throw ex;
}
try
{
//calculate subtotal3 - only calculate if CheckBox is enabled
if (checkBox3.Enabled && !String.IsNullOrEmpty(product3DropDown.Text))
{
//calculate subtotal
subtotal3 = CalculateSubtotal(product3DropDown.Text, lblProduct3UnitPrice.Text);
}
//set value
lblProduct3Subtotal.Text = subtotal3.ToString("$###,##0.00");
}
catch(Exception ex)
{
//ToDo: log msg
//set value
lblMsg.Text = "Error (product3DropDown_SelectedIndexChanged) - " + ex.Message;
//uncommenting the following line may be useful for debugging
//throw ex;
}
//calculate
decimal grandTotal = subtotal1 + subtotal2 + subtotal3;
//set value
lblGrandTotal.Text = grandTotal.ToString("$###,##0.00");
}
private decimal CalculateSubtotal(string strQty, string strUnitPrice)
{
int qty = 0;
decimal unitPrice = 0m;
decimal subtotal = 0m;
//clear msg
lblMsg.Text = string.Empty;
if (!String.IsNullOrEmpty(strQty))
{
//try to convert
Int32.TryParse(strQty, out qty);
}
else
{
throw new Exception("Error: Qty is null or empty");
}
if (!String.IsNullOrEmpty(strUnitPrice))
{
//try to convert
Decimal.TryParse(strUnitPrice, out unitPrice);
//calculate
subtotal = qty * unitPrice;
}
else
{
throw new Exception("Error: UnitPrice is null or empty");
}
return subtotal;
}
protected void checkBox1_CheckedChanged(object sender, EventArgs e)
{
////uncomment for debugging
//lblMsg.Text = "Info: checkBox1.Checked: " + checkBox1.Checked.ToString();
//System.Diagnostics.Debug.WriteLine("Info: checkBox1.Checked: " + checkBox1.Checked.ToString());
//set value
product1DropDown.Enabled = checkBox1.Checked;
if (!product1DropDown.Enabled)
{
//not enabled - reset values
product1DropDown.Text = string.Empty;
lblProduct1Subtotal.Text = "$0.00";
}
//calculate
CalculateGrandTotal();
}
protected void checkBox2_CheckedChanged(object sender, EventArgs e)
{
//uncomment for debugging
//lblMsg.Text = "Info: checkBox2.Checked: " + checkBox2.Checked.ToString();
//set value
product2DropDown.Enabled = checkBox2.Checked;
if (!product2DropDown.Enabled)
{
//not enabled - reset values
product2DropDown.Text = string.Empty;
lblProduct2Subtotal.Text = "$0.00";
}
//calculate
CalculateGrandTotal();
}
protected void checkBox3_CheckedChanged(object sender, EventArgs e)
{
//uncomment for debugging
//lblMsg.Text = "Info: checkBox3.Checked: " + checkBox3.Checked.ToString();
//set value
product3DropDown.Enabled = checkBox3.Checked;
if (!product3DropDown.Enabled)
{
//not enabled - reset values
product3DropDown.Text = string.Empty;
lblProduct3Subtotal.Text = "$0.00";
}
//calculate
CalculateGrandTotal();
}
protected void product1DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
CalculateGrandTotal();
}
protected void product2DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
CalculateGrandTotal();
}
protected void product3DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
CalculateGrandTotal();
}
}
}
資源:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.