【问题标题】:Is Repeater efficient to bind serializable DataStructuresRepeater 是否有效绑定可序列化的 DataStructures
【发布时间】:2012-10-24 06:32:21
【问题描述】:

我一直在使用中继器来绑定nested collection。基本上我正在做的是,显示网页中的所有元素和值。

我的方法是,使用嵌套转发器并在current ItemDataBount Event 中绑定a level below 转发器数据源(请参考下面的代码)

为每个项目创建控件并使用Eval 绑定该数据需要大量的复制和粘贴任务。

考虑到DataSource is serializable,这是绑定嵌套集合的有效且最简单的方法吗?

<asp:Repeater ID="rpt1" OnItemDataBound="rpt1_ItemDataBound" runat="server">   
    <ItemTemplate>

        <asp:Label ID="lblSomeProperty" Text='<%#Eval("SomeProperty") %>' runat="server" />
        <%--few other controls--%>
        <asp:Repeater ID="rpt2"OnItemDataBound="rpt2_ItemDataBound" runat="server">
            <ItemTemplate>

            <asp:Label ID="Label1" Text='<%#Eval("SomeOtherProperty") %>' runat="server" />
                <asp:Repeater ID="rpt3" runat="server">
                    <ItemTemplate>
                    <asp:Label ID="Label1" Text='<%#Eval("SomeMoreProperty") %>' runat="server" />
                    </ItemTemplate>
                </asp:Repeater>

            </ItemTemplate>
        </asp:Repeater>

    </ItemTemplate>
</asp:Repeater>

代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        rpt1.DataSource = //RootElement IEnumerable
    }
}

protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    //proceed only if ItemTemplate OR AlternatingItemTemplate

    //populate user control values from DataItem in current context
    var rpt2 = e.Item.FindControl("rpt2") as Repeater;
    rpt2.DataSource = //Child Level1 IEnumerable
}

protected void rpt2_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    //bind rpt3 DataSource
}

感谢您的帮助。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    如果数据源是可序列化的,那么您绝对应该考虑使用ListViews (MSDN) 而不是中继器来显示您的数据。使用 ListViews,您可以以声明方式绑定数据源,而无需编写任何代码隐藏。您将能够有效地消除用于绑定每个中继器的所有 C# 代码。

    查看StackOverflow answer,了解如何执行此操作的详细说明。

    关键是在每个嵌套的ListView内的标记中设置DataSource

    【讨论】:

      【解决方案2】:

      我会说你的实现是完全可行的,而且效率很高。这是处理您的场景的“.NET 方式”,使用中继器来显示模板化的信息集合,无论这是数据的主要集合还是子集合。

      对于未来的开发人员来说,了解正在发生的事情也很容易,而不是让事情变得过于复杂。无论如何,这就是我处理您的方案的方式,除非有任何进一步的业务需求涉及我扩展中继器控件并使用它。无需将不必要的场景过度复杂化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-23
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        相关资源
        最近更新 更多