C# 正在中继器控件中查找列的小计

C# 正在中继器控件中查找列的小计,c#,asp.net,.net,repeater,databound,C#,Asp.net,.net,Repeater,Databound,我在中继器控件中查找“价格”列的小计时遇到问题。它不计算小计。提前谢谢 以下是中继器的标记: 小计: 下面是隐藏的代码: protectedvoid rptItem_item命令(对象源,RepeaterCommandEventArgs e) { 如果(如CommandName==“删除”) { 列表项目=会话[“购物车”]作为列表; var productId=Convert.ToInt32(e.CommandArgument); var itemToDelete=(来自items中的It

我在中继器控件中查找“价格”列的小计时遇到问题。它不计算小计。提前谢谢

以下是中继器的标记:


小计:
下面是隐藏的代码:

protectedvoid rptItem_item命令(对象源,RepeaterCommandEventArgs e)
{
如果(如CommandName==“删除”)
{
列表项目=会话[“购物车”]作为列表;
var productId=Convert.ToInt32(e.CommandArgument);
var itemToDelete=(来自items中的Item i
其中i.ProductId==ProductId
选择i).FirstOrDefault();
项目。删除(itemToDelete);
会话[“购物车”]=项目;
}
BindData();
}
受保护的无效rptItem_ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
双倍小计=0;
双倍价格=0;
如果(e.Item.ItemType==ListItemType.Item)
{
价格+=转换为双重(datainder.Eval(例如Item.DataItem,“价格”);
小计+=价格;
}
if(e.Item.ItemType==ListItemType.Footer)
{
Label lblSubtotal=(Label)e.Item.FindControl(“lblSubtotal”);
lblSubtotal.Text=小计.ToString();
}
}

ItemDataBound
事件之外声明变量。代码的问题是,在每一行绑定到中继器控件后,都会调用ItemDataBound事件,因此每次
小计
&
价格
被初始化为
0
时,都无法获得预期的输出

double subtotal = 0;
double price = 0;

protected void rptItem_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item)
    {
        price += Convert.ToDouble(DataBinder.Eval(e.Item.DataItem, "Price"));
        subtotal += price;
    }

    if (e.Item.ItemType == ListItemType.Footer)
    {
        Label lblSubtotal = (Label)e.Item.FindControl("lblSubtotal");
        lblSubtotal.Text = subtotal.ToString();
    }
}

ItemDataBound
事件外部声明变量。代码的问题是,在每一行绑定到中继器控件后,都会调用ItemDataBound事件,因此每次
小计
&
价格
被初始化为
0
时,都无法获得预期的输出

double subtotal = 0;
double price = 0;

protected void rptItem_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item)
    {
        price += Convert.ToDouble(DataBinder.Eval(e.Item.DataItem, "Price"));
        subtotal += price;
    }

    if (e.Item.ItemType == ListItemType.Footer)
    {
        Label lblSubtotal = (Label)e.Item.FindControl("lblSubtotal");
        lblSubtotal.Text = subtotal.ToString();
    }
}


你有什么异常吗?没有,我没有在KaushikMahetaSo遇到任何异常。你有什么问题吗?Price和subtotal是rptItem_ItemDataBound中的局部变量,每次你将其赋值为等于0时,你可能需要将Price移到rptItem_ItemDataBound事件之外,作为全局变量。你有什么异常吗?没有,我没有得到任何异常@KaushikMahetaSo您有什么问题吗?Price和subtotal是rptItem_ItemDataBound内的局部变量,每次您将其赋值为等于0时,您可能需要将Price移到rptItem_ItemDataBound事件外,使其成为全局变量。谢谢您!另外,你知道为什么价格会再次计算,如果我添加另一个项目到购物车。例如,产品A($1)。如果我添加产品B($2),它将在页面加载和删除rptItem_itemcond@Rahul-SinghI调用数据绑定时计算=1+1+2@Rahul-SinghI调用数据绑定Signh@RonT-不,我的意思是当您将新项目添加到购物车时?您是否再次调用
DataBind
方法?还要确保在页面加载时使用
!IsPostBack
并且仅在初始get请求时调用数据绑定。不,当我在其他web表单上单击“添加”按钮时,我没有调用数据绑定。但是当我转到购物车表单时,就会调用DataBind。是的,我用过!我在页面加载时返回。我来看看最初的get请求@Rahul SinghI发现了这一点,这是因为“price+=Convert.ToDouble(datainder.Eval(e.Item.DataItem,“price”);“+=将价格加两次。哇,我以前从未真正调试过,但现在我明白了调试@Rahul SinghThank的重要性了,谢谢你!另外,你知道为什么价格会再次计算,如果我添加另一个项目到购物车。例如,产品A($1)。如果我添加产品B($2),它将在页面加载和删除rptItem_itemcond@Rahul-SinghI调用数据绑定时计算=1+1+2@Rahul-SinghI调用数据绑定Signh@RonT-不,我的意思是当您将新项目添加到购物车时?您是否再次调用
DataBind
方法?还要确保在页面加载时使用
!IsPostBack
并且仅在初始get请求时调用数据绑定。不,当我在其他web表单上单击“添加”按钮时,我没有调用数据绑定。但是当我转到购物车表单时,就会调用DataBind。是的,我用过!我在页面加载时返回。我来看看最初的get请求@Rahul SinghI发现了这一点,这是因为“price+=Convert.ToDouble(datainder.Eval(e.Item.DataItem,“price”);“+=将价格加两次。哇,我以前从未真正调试过,但现在我明白了调试@Rahul Singh的重要性