c# - 嵌套 View 中的 3 级列表

标签 c# asp.net

我有这些表 PagesPageVersionsElementsOnPageVersions

我想在一个页面上以可折叠的 View 一次显示它。

像这样:

  • 第 1 页

    • 版本 1
    • 版本 2
    • 版本 3
    • 版本 4
      • 元素 1
      • 元素 2
      • 元素 3
  • 第 2 页

    • 版本 1
    • 版本 2
    • 版本 3
    • 版本 4
      • 元素 1
      • 元素 2
  • 第 3 页

    • 版本 1
      • 元素 1
  • 第 4 页

    • 版本 1
      • 元素 1

我不确定检索数据并在折叠布局中轻松显示数据的最佳方式是什么。

我会做这样的事情:

  1. 一次获取所有项目。 "select * from ElementsOnPageVersion e inner join PageVersions v on e.PageVersion = v.id inner join Pages p on v.PageId = p.id"
  2. 遍历所有,并构建排序列表的层次结构,使其看起来像折叠布局。 PageLists[PagesObject],PagesObject 有一个经过排序的 PageVersionObjects 列表,它有一个经过排序的 ElementObjects 列表。
  3. 遍历最终的 PagesList 列表构建页面。在此迭代 pageversionslist 中显示页面的版本,并再次在每个版本中迭代 elementslist。

此时此刻,这就是我要做的方式。但它似乎太重了,而且迭代很多。

执行此操作的最佳方法是什么?

最佳答案

我会考虑将您的三个不同项目投影到一个自引用列表中。每个项目都需要一个 Id、Description 和 ParentId。我会为此制作一个 View 模型。

public class TreeItem {
    public int Id {get; set;}
    public string Description {get; set;}
    public int ParentId {get; set;}
}

如果您使用的是 MVC,这将允许您利用网络表单中的 asp:TreeView 或任何风格的 jQuery 树/ TreeView 。

关于c# - 嵌套 View 中的 3 级列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20538481/

相关文章:

c# - 向 ExpandoObjects 添加方法

c# - 如何比较一个 SortedDictionary 中的值以将它们添加到新的 SortedDictionary?

c# - 如何合并两个列表的内容?

asp.net - Crystal Report over ASP.Net 运行时数据源更改

c# - LongListSelector 和上下文菜单

c# - 在 C# 中控制对内部集合的访问 - 需要模式

c# - 在 C# 中为图像添加颜色

c# - 在gridview上获取两次点击事件

c# - 如何删除 ListView 中的项目?

c# - 将日期转换为 URL QueryString 并发送