首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在asp.net中嵌套中继器

如何在asp.net中嵌套中继器
EN

Stack Overflow用户
提问于 2011-05-30 10:49:30
回答 3查看 12.3K关注 0票数 7

我需要知道如何在用户控件中嵌套中继器。事情的html方面是好的,这是绑定和代码背后,我需要帮助。我只能使用sql数据源找到示例,这并没有真正的帮助。

我的中继器看起来像这样:

代码语言:javascript
运行
复制
<asp:Panel ID="pnlDiscipline" runat="server" CssClass="">
    <asp:Repeater ID="rptDiscipline" runat="server">
        <ItemTemplate>
            <h4><%#Eval("Discipline")%></h4>
            <ul>
                <asp:Repeater ID="rptPrograms" runat="server">
                    <ItemTemplate>
                        <li><asp:HyperLink runat="server" Text='<%#Eval("Name") %>' NavigateUrl='<%#Eval("Link") %>'></asp:HyperLink> <%#Eval ("Notation") %></li>
                    </ItemTemplate>
                </asp:Repeater>
            </ul>
        </ItemTemplate>
    </asp:Repeater>

希望我需要做的是相当清楚的-- h4规则应该出现一次,属于该规则的所有条目都在下面列出,然后是下一个h4,然后是适当的列表,然后是下一个h4,依此类推。

数据源是在代码中创建的数据视图,其中每一行都有“name”、“Link”、“NOtation”和“discipline”。我已经将数据视图绑定到最外面的中继器,它的行为与预期一样-列出了每个条目的学科名称,但在内部中继器中没有显示任何数据。

我该怎么做才能让它工作呢?

编辑:为了清楚起见,我在代码背后有一个datatable。该表中的每一行都是一个项目,每个项目都属于一个规程。我想使用外部的中继器列出规则,内部的中继器列出每个规则下分组的项目。如下所示:

代码语言:javascript
运行
复制
<h4>DISCIPLINE 1</h4>
    <ul>
        <li>Item</li>
        <li>Item</li>
        <li>Item</li>
    </ul>
<h4>DISCIPLINE 2</h4>
    <ul>        
        <li>Item</li>            
        <li>Item</li>
    </ul>
<h4>DISCIPLINE 3</h4>
    <ul>        
        <li>Item</li>            
        <li>Item</li>
    </ul>

目前,将datatable绑定到外部中继器实现了这一点(示例使用上面的数据):

代码语言:javascript
运行
复制
    <h4>DISCIPLINE 1</h4>
    <h4>DISCIPLINE 1</h4>
    <h4>DISCIPLINE 1</h4>
    <h4>DISCIPLINE 2</h4>
    <h4>DISCIPLINE 2</h4>
    <h4>DISCIPLINE 3</h4>
    <h4>DISCIPLINE 3</h4>

我已经按照建议在外部中继器上使用了OnItemDataBound,并且作为一个测试用例能够访问数据:

代码语言:javascript
运行
复制
protected void rptDiscipline_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{
    DataRowView drView = (DataRowView) e.Item.DataItem;
    string name = drView["Name"] as string;
    string link = drView["Link"] as string;
    string notation = drView["Notation"] as string;
    Response.Write(name + link + notation + "<br />")
}

所以数据就在那里,这正是我期望看到的,我只是不能将其绑定到内部中继器。如果有更好的方法来达到同样的效果,我很乐意修改我的解决方案。

EN

Stack Overflow用户

发布于 2011-05-30 12:53:37

首先,您需要两个列表:规程列表,然后是所有数据的列表。

数据将学科列表绑定到外部中继器。如果有6个学科,中继器应该重复6次。

代码语言:javascript
运行
复制
    <asp:Repeater ID="rptDiscipline" runat="server" OnItemDataBound="rptDiscipline_ItemDataBound">
        <ItemTemplate>
            <h4><%# Eval("Discipline")%></h4>
            <ul>
                <asp:Repeater runat="server" ID="InnerRepeater" >
                    <ItemTemplate>
                        <li>
                            <asp:Label runat="server" ID="lbl" />
                        </li>
                    </ItemTemplate>
                </asp:Repeater>
            </ul>
        </ItemTemplate>
    </asp:Repeater>

protected void rptDiscipline_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{    

    Repeater inner= (Repeater) e.Item.FindControl("InnerRepeater");

    //You want to bind all the data related to this discipline
    DataRowView drView = (DataRowView) e.Item.DataItem;
    string discipline= drView["Discipline"] as string;

    //filter your total data with ones that match the discipline

    inner.DataSource = //data bind the filtered list here
    inner.DataBind();
}
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6171861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档