2011-08-23 40 views
0

我用ASP中继器创建了一个ASP.net网页。我将ASP Repeater与IOrderedEnumerable<int> DataSource绑定。为什么在Page_Load处理程序中DataItem始终为空?

我需要访问Page_Load事件处理程序内部的Repeater DataItems。但是,当我尝试获得repeater.Items[x].DataItem的值时,我总是得到空值。这里应该总是有一个整数值。

尽管如此,页面可以正常显示。为什么我无法访问Page_Load事件处理程序中的RepeaterItems的DataItem属性?

+0

为什么你不直接访问你的收藏?没有理由只能通过DataItem属性访问该项目。 – oscilatingcretin

回答

2

您的Repeater在页面生命周期的后期才会绑定数据。如果你想在一个Page.Load处理引用Repeater.Items[i].DataItem,尽量早期绑定的Repeater第一:

repeater.DataBind() 
+0

我曾尝试调用'.DataBind()'似乎没有任何改变。 –

+0

我在测试中尝试过这种方式,并且在实现'IOrderedEnumerable '作为数据源时遇到了麻烦。我对LINQ不是很熟悉,我认为你的问题可能集中在使用这种类型的数据源。我用LINQ重申了这个问题,希望在这个问题上能得到更多的回答者。 – pseudocoder

0

其绑定时可用。

+0

我试图在页面生命周期的所有不同点上访问它。在DataBinding中只能访问它似乎是非常随意的... –

0

正如其他人所说,它只在数据绑定期间可用。您需要连接中继器的OnItemDataBound事件。在其事件处理程序中,您可以这样做:

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    switch (e.Item.ItemType) 
    { 
     case ListItemType.Item: 
     case ListItemType.AlternatingItem: 
      WhateverType Item = e.Item.DataItem as WhateverType; 
      break; 
    } 
} 
0

数据项仅在数据绑定过程发生后才存在。在转发器中回发中保留的唯一东西是在视图状态中序列化的控件属性。如果您需要这些项目中的数据,您可以尽早使用伪代码表示和数据绑定,或者如果这不可行,您可以编写一个实用程序函数,该函数需要中继器数据项并从中继器的控件中提取它(假设您存储了全部您需要在这些控件中以某种方式获得的信息)

相关问题