我的问题是我想按层次结构显示数据,如下所示:
但是我正在像这样检索数据集:
Party | Office | Candidate -------------------------------------------- Democrat | County Clerk | Candidate 1 Democrat | County Clerk | Candidate 2 Democrat | Magistrate | Candidate 1 Democrat | Magistrate | Candidate 2 Democrat | Magistrate | Candidate 3
我计划使用嵌套的中继器,但是我需要一个不同的Party值,然后才需要该聚会中不同的办公室名称值。
是否有.NET函数可以轻松完成我要尝试的操作?除了转发器以外,还有更好的显示信息的方法吗?
提前致谢!
如果可以修改存储过程,则建议以邻接表的形式显示结果集:
ID Name ParentID 1 Democrat NULL 2 County Clerk 1 3 Magistrate 1 4 Candidate 1 2 5 Candidate 2 2 6 Candidate 1 3 7 Candidate 2 3 8 Candidate 3 3
它减少了检索到的数据量,并允许您针对父子关系进行递归编程。您只需从根开始。通过直接在StringBuilder中构建字符串文字,此方法避免了使用嵌套重复器的麻烦。
StringBuilder sb = new StringBuilder(); DataTable dt = new DataTable(); someDataAdapter.Fill(dt); // find the roots: DataRow[] roots = dt.Select("parentId is null"); sb.Append("<ul>"); foreach (DataRow child in roots) { WriteNode(child, sb); } sb.Append("</ul>"); // recursively write out each node public static void WriteNode(DataRow row, StringBuilder sb) { sb.Append("<li>"); sb.Append(row["Name"]); // find children rows... DataRow[] children = row.Table.Select("parentId = " + row["id"].ToString()); if (children.Length > 0) { sb.Append("<ul>"); foreach (DataRow child in children) { WriteNode(child, sb); } sb.Append("</ul>"); } sb.Append("</li>"); }