和csdn论坛的菜单差不多吧??无限制级的更好:-D求数据库的设计方案及实现菜单的SQL语句。主要是想不到SQL语句该怎么实现,所以数据不知该如何设计好谢谢!注:目前我已经找到了js的控件树,但是需要对应的SQL语句来得到动态输出的HTML,所以上面部分才是重点,谢谢
解决方案 »
- asp.net mvc 3 如何实现where id in(1,2,3,4,5)
- Spacebuilder社交系统安装后出现,HTTP 404。“/”应用程序中的服务器错误。
- 上传问题
- IIS设置问题,发过一贴没解决,我结了,再发一贴,希望各位高手指点
- 关于DropDownList的一个问题,只剩10分大家帮忙!不胜感激!
- 大家有没有遇到过这种情况?????急。。。。。。。。。
- 求css式样
- 急求页面跳转问题,如:从A页面跳到B页面,先刷新B页面, 在运行B页面代码,运行结束后,再返回A页面。求各位大大帮帮。
- 自己做的验证码第一次得不到值、刷新一次后得到的是第一次的?
- 请问何处有Crystal Report 9 下载?
- ASPNET动态生成图片与随鼠标移动显示相关信息解决方案
- 客户端网页如何关闭远程机器
就是treeview的设计就可以了啊。我这有几个菜单 但是没有改成递归的也是输出HTML的。你可以参考传送门
子夜大神,我已经看过你的bolg了,第三个是可以,但是没有数据库啊。。我在cnblogs给你发邮件了。。
id name pid(上级id)
取出数据后,在生成dtree需要的js脚本,dtree就会自动生成树形目录
这个想法不错,不过,我不知道怎么做??用sql语句该怎么写!
直接把你数据想要的数据select出来就行了,不需要什么特殊的sql语句
# region 绑定菜单
private void BindMenu()
{
string sql;
sql = "select cSupMenuCode,cMenuCode,cMenuName,cPathURL,iSorting,cispage from u_Menu where cMenuCode in (select cMenuCode from u_Purview where cUserCode='" + ((EPG_User)Session["user"]).UserCode + "' and cView=1) and ((cSupMenuCode like '" + (Request["id"] == null ? Session["link"] : Request["id"]) + "%' or cMenuCode='" + (Request["id"] == null ? Session["link"] : Request["id"]) + "') or (cMenuCode='1')) order by iSorting,cMenuCode";
//sql = "select cSupMenuCode,cMenuCode,cMenuName,cPathURL,iSorting,cispage from u_Menu where cMenuCode in (select cMenuCode from u_Purview where cUserCode='Admin' and cView=1) and ((cSupMenuCode like '" + (Request["id"] == null ? Session["link"] : Request["id"]) + "%' or cMenuCode='" + (Request["id"] == null ? Session["link"] : Request["id"]) + "') or (cMenuCode='1')) order by iSorting,cMenuCode";
DataTable ctbl=EPG.ExecQuerySql(sql);
string aa = "";
for (int i = 0; i < ctbl.Rows.Count; i++)
{
if ((ctbl.Rows[i]["cSupMenuCode"].ToString() == null ? "-1" : ctbl.Rows[i]["cSupMenuCode"].ToString()) == "1" || (ctbl.Rows[i]["cSupMenuCode"].ToString() == null ? "-1" : ctbl.Rows[i]["cSupMenuCode"].ToString()) == "-1")
{
aa += " d.add(" + ctbl.Rows[i]["cMenuCode"].ToString() + "," + (ctbl.Rows[i]["cSupMenuCode"] == null ? "-1" : ctbl.Rows[i]["cSupMenuCode"].ToString()) + ",'" + ctbl.Rows[i]["cMenuName"] + "','','" + ctbl.Rows[i]["cMenuName"] + "','mainFrame');";
}
else
{
aa += " d.add(" + ctbl.Rows[i]["cMenuCode"] + "," + (ctbl.Rows[i]["cSupMenuCode"] == null ? "-1" : ctbl.Rows[i]["cSupMenuCode"].ToString()) + ",'" + ctbl.Rows[i]["cMenuName"].ToString() + "','" + ctbl.Rows[i]["cPathURL"] + "?MenuCode=" + ctbl.Rows[i]["cMenuCode"].ToString() + "','" + ctbl.Rows[i]["cMenuName"].ToString() + "','mainFrame');";
}
} string outstring = "<SCRIPT type='text/javascript'>" +
"try{" +
"d = new dTree('d');" +
"d.config.closeSameLevel = true;" +
"d.config.useStatusText = true; " + aa + "document.write(d);d.closeAll();" +
"}catch(e){;}";
outstring += "</SCRIPT>";
this.LiteralMenu.Text = outstring;
}
# endregion不知道楼主用的JS 是不是和我一样的
http://topic.csdn.net/u/20091117/11/0520F3CA-10F0-4924-8743-1523A8984530.html
关键是sql里面的递归不会吧故居需要动态sql语句不会。。
/// <summary>
/// 绑定功能模块的菜单
/// </summary>
/// <param name="tree"></param>
/// <param name="ModuleCode"></param>
/// <param name="cUserCode"></param>
/// <returns></returns>
public static string BindMenu(TreeView tree, string ModuleCode, string cUserCode)
{
string sql = "";
switch (ModuleCode)
{
case "background":
sql = "select cParentNodeCode,cNodeCode,cNodeName,cPathUrl from t_Back_Menu where cNodeCode in ( " +
"select cModCode from t_Back_RolePurview where bLook=1 and cRoleCode=( " +
"select cRoleCode from t_Back_RoleUser where cUserCode ='" + cUserCode + "')) order by iSorting";
break;
default:
sql = "select cParentNodeCode,cNodeCode,cNodeName,cPathUrl from t_Sys_Menu where cNodeCode in ( " +
"select cModCode from t_Purview_Systempurviewsetting where bLook=1 and cRoleCode=( " +
"select a.crolecode from t_Purview_Userpurview a inner join t_Sys_moduleRoleList b on a.cRoleCode=b.cRoleCode where a.cUserCode='" + cUserCode + "' and b.cModuleCode='" + ModuleCode + "')) order by iSorting";
break;
}
string chenggong = "1";
try
{
DataSet ds = Cls_Data.ExecuteQuerySqlDs(sql);
InitTree(ds.Tables[0], tree.Nodes, "1");
}
catch (Exception ex)
{
chenggong = ex.Message;
}
return chenggong;
} private static void InitTree(DataTable dt, TreeNodeCollection Nds, string parentId)
{
DataView dv = new DataView(dt);
TreeNode tmpNd;
dv.RowFilter = "cParentNodeCode=" + "'" + parentId + "'";
foreach (DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNd.Text = drv["cNodeName"].ToString();
if (parentId != "1")
{
if (drv["cPathUrl"].ToString() != "")
{
tmpNd.Text = "<a onclick=\"parent.document.all('rightFrame').src='" + drv["cPathUrl"].ToString() + "';\" style=\"cursor:pointer\">" + drv["cNodeName"].ToString() + "</a>";
}
tmpNd.SelectAction = TreeNodeSelectAction.Expand;
}
else
{
tmpNd.SelectAction = TreeNodeSelectAction.Expand;
}
Nds.Add(tmpNd);
InitTree(dt, tmpNd.ChildNodes, drv["cNodeCode"].ToString());
}
}
#endregion
曾经坐过一个类似QQ评论的嵌套,就是用的SQL递归。
1 0 财务管理
2 0 业务管理
3 1 工单结算
4 3 工单批量结算读取的时候先读取p_id为0的顶级菜单,自己联想下吧。多的就不写了,这样就是无限级的了。是不是很简单?
http://blog.csdn.net/amandag/article/details/5021126