动态数据站点下拉列表中的分层数据

Mik*_*ott 5 c# asp.net dynamic-data

我正在进入动态数据站点(非常强大)并享受它.但是,我要求我似乎无法满足.我有一个自联接类别表(Id,Name,ParentId)来创建一个分层类别结构(例如,具有空id的类别是顶级的,通常的类型).然后我有一个产品表,其中包含该类别的外键.

在动态数据站点中,我自动生成了类别下拉列表; 但它只是按数字顺序列出所有类别.我想要的(以及我之前编码的,动态前数据)是一个缩进列表,按层次排列的类别列表.

我是否更换现有的FilterUserControl?我可以在任何地方覆盖PopulateListControl方法吗?有没有人有任何LINQ语法来提取自连接的分层数据?

只需指点和建议,谢谢你提供的任何帮助.

亲切的问候,

迈克金斯科特

Qua*_*noi 2

在甲骨文中:

SELECT  LEVEL, Id, Name, LPAD(' ', LEVEL) || Name AS IndentedName
FROM    Categories
START WITH
        ParentID IS NULL
CONNECT BY
        ParentID = PRIOR Id
ORDER SIBLINGS BY
        Name
Run Code Online (Sandbox Code Playgroud)

您可以使用IndentedName或基于LEVEL伪列自定义格式(它显示每个类别的深度)

PS 这是一个bad用作NULL顶级父 ID 的想法,因为您无法使用索引来访问它。使用 a0代替。

更新:

SQL Server

WITH    q (id, parentid, name, level, bc) AS
        (
        SELECT  id, parentid, name, 1, CAST(ROW_NUMBER() OVER (ORDER BY name) AS VARCHAR(MAX))
        FROM    Categories
        WHERE   ParentID IS NULL
        UNION ALL
        SELECT  c.id, c.parentid, c.name, q.level + 1, q.bc + '.' + CAST(ROW_NUMBER() OVER (ORDER BY c.name) AS VARCHAR(MAX))
        FROM    q
        JOIN    Categories c
        ON      c.parentId = q.id
        )
SELECT  *
FROM    q
ORDER BY
        bc
Run Code Online (Sandbox Code Playgroud)

与 不同的是OracleSQL Server索引NULL值,因此可以使用 aNULL来标记最终祖先。