2

我在 L2S 类 dbml 中有 5 个表:全局 >> 类别 >> 子类别 >> 项目 >> 项目数据。我希望能够从全局表向下导航到树状结构以获取项目 - 显示项目数据表中的标题。

我有一个现有的控件,它使用 IHierarchyData / IHierarchicalEnumerable 扩展集合,通过迭代集合来输出一个无序列表,然后我用 jquery 将它变成一棵树。我是根据分层 sql 数据中的 Return Un-Ordered List做到的

是否有一种简单的通用方法可以用来将上述表结构中的数据放入分层结构中,以便我可以重用现有控件并传入不同的集合。

4

4 回答 4

1

您是否尝试过嵌套列表视图?我已经在几页中实现了这个解决方案。我直接使用 ObjectDataSources 而不是 LinqDataSources 来保持我的数据逻辑分离,但嵌套的 EntitySets 工作得很好。

于 2009-09-22T17:30:33.873 回答
0

您可以使用 Union 运算符将您的四个表混合在一起。 http://weblogs.asp.net/zeeshanhirani/archive/2008/04/11/union-operator-part-12.aspx

于 2009-07-17T20:44:58.870 回答
0

我认为让你感到困惑的是你不需要四张桌子来做到这一点。

再次查看从分层 sql 数据返回无序列表。那里没有四张桌子。只有一个。

于 2009-07-17T19:45:51.393 回答
0

由于在这种情况下您要处理不同的类型,因此您必须在它们中的每一个上实现一个通用接口以使代码具有通用性。基本方法是创建一个包含任何所需属性(例如 DisplayText、ActionURL 等)的接口,然后递归地遍历集合。

这是一个粗略的例子:

 public interface IDataItem
    {
        string DisplayText { get; }
        string ActionUrl { get;  }
        bool HasChildren { get; }
        IEnumerable<IDataItem> GetChildren();
    }

 public void CreateTree(HtmlTextWriter writer, IEnumerable<IDataItem> collection)
    {
        writer.WriteFullBeginTag("ul");
        foreach (var data in collection)
        {
            writer.WriteFullBeginTag("li");
            writer.WriteBeginTag("a");
            writer.WriteAttribute("href",data.ActionUrl);
            writer.Write(HtmlTextWriter.TagRightChar);
            writer.Write(data.DisplayText);
            writer.WriteEndTag("a");
            if(data.HasChildren)
                CreateTree(writer, data.GetChildren());
            writer.WriteEndTag("li");
        }
        writer.WriteEndTag("ul");
    }

您必须在要包含在树视图中的每种类型上实现接口。只需传入顶级类型的集合,上面的方法将沿着层次结构向下创建所需的嵌套列表。

于 2009-10-12T19:53:41.753 回答