如何在ASP.NET中实现N级嵌套的Repeater控件?

杰明·索尼(Jaimin Soni)

我想在ASP.NET中使用转发器控件来实现n级数据层次结构。有没有实现该层次结构的解决方案?

Menno van den Heuvel

对于此答案,我将建议您以编程方式创建模板-参见此处:https : //msdn.microsoft.com/zh-cn/library/aa289501可能有一些方法可以使用在标记中创建的模板,但这似乎更容易,而且绝对更灵活。

我从只有中继器(而不是模板)的页面开始

<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater runat="server" ID="TestRepeater">
        </asp:Repeater>
    </div>
    </form>     
</body>

和一个数据类

public class DataClass
{
    public string Name { get; set; }
    public List<DataClass> Children { get; set; }
}

对于模板,我们使用以下类:

public class DataTemplate : ITemplate
{
    public void InstantiateIn(Control container)
    {
        var name = new Literal();
        var repeater = new Repeater();

        name.DataBinding += BindingLiteral;
        repeater.DataBinding += BindingRepeater;

        // this here makes it recursive
        repeater.ItemTemplate = new DataTemplate();

        container.Controls.Add(name);
        container.Controls.Add(repeater);
    }

    private void BindingLiteral(object sender, System.EventArgs e)
    {
        var name = (Literal)sender;
        var container = (RepeaterItem)name.NamingContainer;
        name.Text = String.Concat("<h2>", DataBinder.Eval(container.DataItem, "Name").ToString(), "</h2>");
    }

    private void BindingRepeater(object sender, System.EventArgs e)
    {
        var name = (Repeater)sender;
        var container = (RepeaterItem)name.NamingContainer;
        name.DataSource = DataBinder.Eval(container.DataItem, "Children");
    }
}

显然,您将要使用更复杂的模板。请注意,如果您当前在标记中具有模板,则可以简单地获取标记解析器生成的代码,并使其适应您的需求。

现在,在页面后面的代码中,我们简单地分配ItemTemplate和DataSource:

public partial class Test : System.Web.UI.Page
{
    protected void Page_Init(object sender, EventArgs e)
    {
        TestRepeater.DataSource = GetTestData();
        TestRepeater.ItemTemplate = new DataTemplate();
        TestRepeater.DataBind();
    }
}

这样做的好处是您的模板只是一个类,因此您可以向其添加一个public Int32 Depth { get; set; },然后根据您的深度更改生成的控件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET中实现N级嵌套的Repeater控件?

来自分类Dev

如何使用asp.net中div标签中的任何其他控件实现嵌套GridView功能

来自分类Dev

如何在asp.net页中查找标签控件

来自分类Dev

如何在ASP.NET 4.5中禁用对控件的验证

来自分类Dev

如何在Asp.net MVC中实现插件/插件?

来自分类Dev

如何在ASP.NET中实现OWIN Ilogger?

来自分类Dev

如何在asp.net中实现SAML?

来自分类Dev

如何在ASP.NET中实现AsQueryable()

来自分类Dev

如何在ASP.NET中实现SQL Helper类

来自分类Dev

如何在ASP.NET中实现OWIN Ilogger?

来自分类Dev

如何在ASP.NET中动态创建的用户控件上找到控件?

来自分类Dev

如何在ASP.NET中动态创建的用户控件上找到控件?

来自分类Dev

如何在Repeater Asp.Net C#中更改LinkButton内的图像源

来自分类Dev

如何在ASP.NET中删除asp:calendar的“周末”?

来自分类Dev

如何在asp.net中使用Telerik控件?

来自分类Dev

如何在ASP.net控件中使用twitter bootstrap?

来自分类Dev

如何在ASP标签控件的JavaScript中获取价值?

来自分类Dev

如何在静态方法中访问Asp控件?

来自分类Dev

如何在网格视图asp控件中显示图像?

来自分类Dev

如何在python中实现n次嵌套循环?

来自分类Dev

如何在asp.net中的UpdatePanel中获取控件的ID

来自分类Dev

如何在Delphi控件中实现接口

来自分类Dev

如何在 ASP.NET 项目中实现 Azure Push?

来自分类Dev

如何在ASP.NET中使用<%%>?

来自分类Dev

如何在asp.net中使用<%%>?

来自分类Dev

如何在Asp.Net MVC Razor中创建“通用”控件?

来自分类Dev

如何在ASP.NET中设置用户控件属性的值?

来自分类Dev

如何在ASP.NET MVC中创建可重用控件

来自分类Dev

如何在iframe ASP.NET中获取所有控件

Related 相关文章

热门标签

归档