通过另一页上的datalist循环

时间:2014-08-21 16:31:57

标签: c# asp.net datalist findcontrol datalistitem

我在ascx页面上有一个名为shippingorders1的数据表,我正在尝试访问名为lblGiftCodeAmount的标签。我试图循环通过datalist并检索标签的文本将其转换为十进制并总结它。在我的主页面的点击事件中,我有以下内容:

decimal addGiftCards = 0.0M;
foreach(DataListItem dli in (DataList)Page.FindControl("ShippingOrders1").FindControl("dlGiftCodeAmount").Items)
{
    addGiftCards += Convert.ToDecimal(((Label)dli.FindControl("lblGiftCodeAmount")).Text);
}

运行时,由于标签,我在NullReferenceException行上获得了addGiftCards+=。 在我输入的立即窗口中:

(DataList)Page.FindControl("ShippingOrders1").FindControl("dlGiftCodeAmount").Items

它向我展示了我希望看到的所有内容,但当我输入dli时,它会将DataItem作为null返回。我在另一个页面上遍历这个完全相同的datalist,它没有给我任何问题。那么有谁能告诉我我做错了什么以及我能做些什么来解决这个问题呢?

我需要更新解决方案。

1 个答案:

答案 0 :(得分:0)

DataItem仅在初始页面加载时可用;之后,数据通过viewstate保存,DataItem不可用。它只能在重新绑定时再次使用。此外,Items也可能包含您可能拥有的任何页眉或页脚,因此FindControl不会在其他模板中找到控件。