|M| 求一条SQL查询语句
如有表
tab
Id name parentID
1 文件 0
2 编辑 0
3 工具 0
4 剪切 2
5 新建 1
6 复制 2
7 打开 1
8 保存 1
9 初始 9
10 选项 3
上面是一条多级菜单表
绑定树的时候为
文件
新建
打开
保存
编辑
剪切
复制
工具
选项
初始
现在要通过SQL语句把上面的表查询排序为
Id name parentID
1 文件 0
5 新建 1
7 打开 1
8 保存 1
2 编辑 0
4 剪切 2
6 复制 2
3 工具 0
10 选项 3
9 初始 9
这个样子谢谢
------解决方案--------------------排序做什么呀,是不是最终在页面上显示呀
------解决方案--------------------搞不清楚你这样弄有什么实际意义?
------解决方案--------------------SQL的输出不可能是你需要的菜单的,这样没什么意义,另外
----------------------
9 初始 9
----------------------
改一下
------解决方案--------------------用SQL语句不容易实现,你无非是要构造树,可以先读入数据集,然后使用下面的函数。调用方法是:
FillTree(DataSet1.xxTable, TreeView1.Nodes, "根的父结点ID,你的是0 ", "parentID ", "ID ", "name ", "ID ", NavigetUrl, Target);
适用于框架结构,如果不是这种结构,自己改一下就是了。
/// <summary>
/// 填充树控件
/// </summary>
/// <param name= "dt "> 树控件结构所在表 </param>
/// <param name= "tns "> 节点集合 </param>
/// <param name= "strParentID "> 父节点值 </param>
/// <param name= "strParentField "> 父节点字段 </param>
/// <param name= "strSortField "> 排序字段 </param>
/// <param name= "strTextField "> 显示文本字段 </param>
/// <param name= "strValueField "> 值字段 </param>
/// <param name= "strNavigate "> 导航页 </param>
/// <param name= "strTarget "> 导航目标 </param>
public void FillTree(DataTable dt, TreeNodeCollection tns, string strParentID, string strParentField, string strSortField, string strTextField, string strValueField, string strNavigate, string strTarget)
{
TreeNode tn = null;
DataRow[] drs = dt.Select(string.Format( "{0}={1} ", strParentField, strParentID), strSortField);
foreach (DataRow dr in drs)
{
tn = new TreeNode();
tn.Text = dr[strTextField].ToString();
tn.Value = dr[strValueField].ToString();
tn.NavigateUrl = string.Format( "{0}?P={1} ", strNavigate, dr[strValueField]);
tn.Target = strTarget;
tns.Add(tn);
FillTree(dt, tn.ChildNodes, dr[strValueField].ToString(), strParentField, strSortField, strTextField, strValueField, strNavigate, strTarget);
}
}
------解决方案--------------------呵呵,楼主是不是想做动态控件?根据存在数据库中的数据读取出来以后程序再画出控件来?
只要在表中标示出控件所处在层次就行了