c# - 为 ASP.NET 实现 HierarchicalDataBoundControl

标签 c# asp.net custom-server-controls

我想为 ASP.NET 实现分层数据绑定(bind)控件。

我用了Implementing IHierarchy Support Into Your Custom Collection作为创建我的分层集合的基础。我还为集合创建了一个 HierarchicalDataSourceControl。一切正常:我可以将它绑定(bind)到 ASP.NET TreeView 并正确呈现数据。

但是,我卡在了 HierarchicalDataBoundControl 上。我找到了例子,但我对 c#/.Net 还是太陌生了,无法理解它们。我不太明白如何实现示例:

Rendering a databound UL menu

也不

HierarchicalDataBoundControl Class

有没有人有任何提示或更好的例子来实现这样的控件?

最佳答案

作为另一个 DataBound 控件,您必须重写 PerformDataBinding 方法,如下所示。

protected override void PerformDataBinding()
{
    base.PerformDataBinding();

    if (!IsBoundUsingDataSourceID && this.DataSource == null) return;

    HierarchicalDataSourceView view = this.GetData(string.Empty);
    if (view != null)
    {
        IHierarchicalEnumerable root = view.Select();
    }
}

虽然您的控件在这种情况下支持 DataSourceHierarchialDataSource 控件,但应检查是否有分配的 DataSource,获取其 DataSourceView 完成数据绑定(bind)。通过GetData方法即可实现。然后调用view的Select方法获取根集合。

之后,您必须遍历作为 IHierarchialEnumerable 类型对象的根集合。它有一个名为 GetHierarchyData 的简单方法,该方法提供一个对象(该对象是集合中的一项)并返回描述节点的关联 IHierarchyData。这个方法就在那里,因此在大多数时候你不知道项目的实际类型。 IHierarchyData 表示有关节点及其子节点的一些信息。

最后,您不需要编写新的 DataSource 控件。如果您在创建自定义导航控件之后,最好为 SiteMapDataSource 编写一个新的提供程序。

关于c# - 为 ASP.NET 实现 HierarchicalDataBoundControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086295/

相关文章:

c# - 如何从不是从 Controller 派生的类返回 ActionResult(文件)?

c# - 将 Web 应用程序转换为网站

asp.net - 网络资源文件

javascript - 使用 jQuery 在单击时获取超链接的名称

c# - 如何在分组项目页面中每组之前插入图像列表?

c# - 如何将依赖项注入(inject) ELMAH 自定义错误日志?

c# - ASP.NET StateBag 和自定义控件

asp.net - 如何 : Use AJAX in an ASP. NET 自定义服务器控件

asp.net 服务器控件 - 避免添加多个 javascript

c# - 你如何在 CaSTLe MVC (Monorail) 中获取用户的 IP 地址?