我有一个L2S类5桌DBML:全球>>分类>>子分类>>项目>>项目数据。 我希望能够从全局表向下导航树状结构去的项目 - 显示在项目数据表的称号。
我有一个通过遍历集合输出未排序的列表,然后我变成使用jQuery树使用IHierarchyData / IHierarchicalEnumerable扩展集合现有的控制。 我没有它的基础上,从分层SQL数据返回取消有序列表
有没有我可以用它来把数据从上面的表结构为AA层次结构,这样我就可以重新使用现有的控制,只是传递一个不同的集合一种简单通用的方法。
你有没有试过嵌套的列表视图 ? 我已经实现在多个页面此解决方案。 我用ObjectDataSources,而不是直接LinqDataSources让我的数据逻辑分离,但嵌套EntitySets做工精美。
我想是挂您的是,你并不需要四个表做到这点。
看看从分层SQL数据返回无序列表一次。 有没有四张桌子那里。 这里只有一个。
您可以使用UNION运算符来混搭你的四个表在一起。 http://weblogs.asp.net/zeeshanhirani/archive/2008/04/11/union-operator-part-12.aspx
既然你是在这种情况下,应对不同类型,你将必须实现他们每个人一个共同的接口,使代码通用。 基本的方法是创建包括任何需要的特性(例如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");
}
您将必须落实每个类型的要包括在树视图界面。 刚刚通过顶层类型的集合中和上述方法将走在层次结构创建所需的嵌套列表。
文章来源: Put linq to sql results into hierarchical structure for using in a un-ordered list ( for jquery tree )