【问题标题】:Looping through a datalist on another page循环浏览另一个页面上的数据列表
【发布时间】:2014-08-21 16:31:56
【问题描述】:

我在 ascx 页面上有一个名为 shippingorders1 的数据列表,我正在尝试访问名为 lblGiftCodeAmount 的标签。我正在尝试遍历数据列表并检索标签的文本,将其转换为十进制并求和。在我的主页的点击事件中,我有以下内容:

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

当它运行时,由于标签,我在 addGiftCards+= 线上得到一个 NullReferenceException。 在我输入时的即时窗口中:

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

它显示了我希望看到的所有内容,但是当我输入 dli 时,它会将 DataItem 返回为 null。我在另一个页面上循环浏览这个完全相同的数据列表,它没有给我带来任何问题。那么谁能告诉我我做错了什么以及我可以做些什么来解决这个问题?

任何额外的代码需要我会更新解决方案。

【问题讨论】:

  • 您没有在循环中的任何地方使用 Loop Var (dli)?还有什么(Shippingorders1)?
  • @wizpert 感谢您的发现,我尝试了其他方法,但在复制代码之前忘记将其切换回来。以上代码已更新

标签: c# asp.net datalist findcontrol datalistitem


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2020-01-02
    • 2010-09-10
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多