首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >中继器中的中继器

中继器中的中继器
EN

Stack Overflow用户
提问于 2010-05-28 00:55:16
回答 7查看 60.2K关注 0票数 44

我在中继器里有一个中继器。其中父中继器被绑定到具有其中具有Datatable的列的Datatble

我希望将子中继器绑定到父中继器数据行中的datatable列

这个是可能的吗?我想我可以直接在aspx文件中执行此操作,如下所示:

DataSource="<%# DataBinder.Eval(Container.DataItem, "Products")%>",但它似乎不起作用。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-05-28 00:58:24

在父中继器中,将一个方法附加到OnItemDataBound事件,并在该方法中找到嵌套的中继器并对其进行数据绑定。

示例(.aspx):

代码语言:javascript
运行
复制
<asp:Repeater ID="ParentRepeater" runat="server" OnItemDataBound="ItemBound">
    <ItemTemplate>
        <!-- Repeated data -->
        <asp:Repeater ID="ChildRepeater" runat="server">
            <ItemTemplate>
                <!-- Nested repeated data -->
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

示例(.cs):

代码语言:javascript
运行
复制
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ParentRepeater.DataSource = ...;
        ParentRepeater.DataBind();
    }
}

protected void ItemBound(object sender, RepeaterItemEventArgs args)
{
    if (args.Item.ItemType == ListItemType.Item || args.Item.ItemType == ListItemType.AlternatingItem)
    {
        Repeater childRepeater = (Repeater)args.Item.FindControl("ChildRepeater");
        childRepeater.DataSource = ...;
        childRepeater.DataBind();
    }
}
票数 82
EN

Stack Overflow用户

发布于 2010-05-28 01:03:43

我将向子中继器本身添加一个DataBinding事件:

代码语言:javascript
运行
复制
<asp:Repeater ID="parentRepeater" runat="server">
    <asp:Repeater ID="childRepeater" runat="server"
        OnDataBinding="childRepeater_DataBinding" />
</asp:Repeater>

然后实现它:

代码语言:javascript
运行
复制
protected void childRepeater_DataBinding(object sender, System.EventArgs e)
{
    Repeater rep = (Repeater)(sender);

    int someIdFromParentDataSource = (int)(Eval("ParentID"));

    // Assuming you have a function call `GetSomeData` that will return
    // the data you want to bind to your child repeater.
    rep.DataSource = GetSomeData(int);
    rep.DataBind();
}

我更喜欢在控件级别而不是ItemDataBound级别执行此操作,这样,如果您必须删除模板中的控件或项,则不必担心在使用它的父控件中查找代码。它都是本地化的,不需要自己控制。另外,你永远不需要做FindControl

如果你想在将来替换一个控件,你只需要删除它,你的代码仍然可以工作,因为它都是自包含的。使用ItemDataBound会导致您的代码仍在编译,但由于依赖于子控件而在运行时崩溃或意外执行。

票数 26
EN

Stack Overflow用户

发布于 2010-05-28 02:51:45

下面是它的实现方法:

代码语言:javascript
运行
复制
DataSource='<%# ((System.Data.DataRowView)Container.DataItem)[3] %>'

因此,如果您知道包含嵌套中继器的子表/数据源的父表中的列,则可以将其直接放入aspx文件中。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2923137

复制
相关文章

相似问题

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