【问题标题】:Repeater inside repeater not binding properly中继器内的中继器未正确绑定
【发布时间】:2012-11-21 10:25:29
【问题描述】:

我在另一个里面有一个中继器。像这样:

<asp:Repeater ID="CategoryRepeater" runat="server" OnItemDataBound="ItemBound">
    <ItemTemplate>
        <div class="groupbox">
            <fieldset>
                <legend><%# Container.DataItem %></legend>
                <table>
                    <asp:Repeater ID="ItemRepeater" runat="server">
                    <ItemTemplate>
                        <tr>
                        <td>
                            <asp:CheckBox id="chkItem" runat="server" Text='<%# Eval("Text")%>' />  
                            <asp:Button ID="btnXRefs" Text="x-refs" runat="server" CssClass="xRefButton" OnClick="btnSelectXRefs_Click" />
                        </td>
                        </tr>
                    </ItemTemplate>
                    </asp:Repeater>
                </table>
            </fieldset>
        </div>
    </ItemTemplate>
</asp:Repeater>

代码隐藏:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            using (var db = new DbContext())
            {
                CategoryRepeater.DataSource = db.Categories.OrderBy(x => x.Heading).Select(x => x.Heading).Distinct();
                CategoryRepeater.DataBind();
            }
        }
    }

    protected void ItemBound(object sender, RepeaterItemEventArgs args)
    {
        if (args.Item.ItemType == ListItemType.Item)
        {
            Repeater childRepeater = (Repeater)args.Item.FindControl("ItemRepeater");
            var item = args.Item as RepeaterItem;
            using (var db = new DbContext())
            {
                childRepeater.DataSource = db.Categories.Where(x => x.Heading == item.DataItem).OrderBy(x => x.Text);
                childRepeater.DataBind();
            }
        }
    }

我的目标是首先使用顶层制作许多groupboxes,然后将项目绑定到每个项目中。所以我最终得到了许多小堆叠的复选框列表。

问题是,所有顶级框都出现了,但只有第一个包含复选框项目,即。只有第一个是内部绑定的,ItemBound 方法只对第一个调用一次。

有什么想法吗?

【问题讨论】:

  • 对不起,这是我的代码中的一个错误,我最初确实按照这个 Q 尝试了 OnItemDataBound -- stackoverflow.com/questions/2923137/repeater-in-repeater (antons answer)
  • 你是怎么绑定这个东西的?可以分享一下你的绑定代码吗?
  • @yogi 发布了链接到此的完整代码。
  • 你的CategoryRepeater有多少个项目?
  • 目前只有 2 个。第一个有 2 个子项目,第二个有 4 个。但第二个没有显示,因为我认为它的绑定不正确。由于第一次绑定,只显示顶级名称。

标签: asp.net html data-binding webforms repeater


【解决方案1】:

这一行

if (args.Item.ItemType == ListItemType.Item)

应该是这样的

if(args.Item.ItemType = ListItemType.Item || 
   args.Item.ItemType == ListItemType.AlternatingItem)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多