ASP.NET - 获取数据绑定列表中的下一个值

时间:2014-06-30 03:06:09

标签: c# asp.net

我正在对一个字符串列表进行数据绑定,我知道如何使用_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;
    }
}

1 个答案:

答案 0 :(得分:1)

您无法访问转发器的OnItemDataBound事件中的下一个项目,因为ItemDataBound事件刚刚从数据源项绑定当前数据项后触发。围绕此解决方案的一些工作可能是

  1. 将数据源设为类级变量。在OnItemDataBound事件中,找到数据源中的下一个项目。 (当然你提到过,你不想这样做)

  2. 您可以绑定自定义对象列表,而不是绑定字符串列表。该对象可以包含两个属性CurrentValue和NextValue。在绑定到转发器之前,您必须构建此列表并绑定它。然后,您可以在OnItemDataBound事件中访问它们。

  3. 另一种方法是,在调用DataBind函数之后,遍历转发器项并执行您想要执行的操作,例如为某些控件设置下一个值等。