我正在对一个字符串列表进行数据绑定,我知道如何使用_ItemDataBound
获取(String)e.Item.DataItem
函数正在使用的DataItem中的当前字符串,但我想知道是否有&# 39;获得该函数将要使用的下一个DataItem
的方法。
我试图避免将List设置为全局变量。
编辑:以下是我的实际代码示例,因为我目前无法使用实际代码访问PC。
Repeater.aspx
<asp:Repeater ID="rptGeneral" runat="server" OnItemDataBound="rptItemDataBound">
<ItemTemplate>
<asp:Label ID="lblQuestion" runat="server"></asp:Label>
</ItemTemplate>
</asp:Repeater>
Repeater.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Repeater repeat = rptGeneral;
if (!IsPostBack)
{
//I'm obtaining the questions from my database
//connection, dataReader and other sql variables are here
List<String> list = new List<String>();
while(dataReader.Read())
{
list.Add(dataReader["questionName"].ToString());
}
dataReader.Close()
repeat.DataSource = list;
repeat.DataBind();
}
}
public void rptItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
String question = (String)e.Item.DataItem;
String nextQuestion; //get the next DataItem
Label lblQuestion = (Label)e.Item.FindControl("lblQuestion");
lblQuestion.Text = question;
}
}
答案 0 :(得分:1)
您无法访问转发器的OnItemDataBound事件中的下一个项目,因为ItemDataBound事件刚刚从数据源项绑定当前数据项后触发。围绕此解决方案的一些工作可能是
将数据源设为类级变量。在OnItemDataBound事件中,找到数据源中的下一个项目。 (当然你提到过,你不想这样做)
您可以绑定自定义对象列表,而不是绑定字符串列表。该对象可以包含两个属性CurrentValue和NextValue。在绑定到转发器之前,您必须构建此列表并绑定它。然后,您可以在OnItemDataBound事件中访问它们。
另一种方法是,在调用DataBind函数之后,遍历转发器项并执行您想要执行的操作,例如为某些控件设置下一个值等。