注册 登录
编程论坛 ASP.NET技术论坛

[求助]高手帮忙,如何让mainMenu控件绑定到数据库!

tuablove 发布于 2007-03-27 22:13, 1367 次点击

一个menu控件,有静态绑定有动态绑定
样子:
一级菜单(静态):首页|新闻中心|产品中心|帮助中心
二级菜单(动态): |国内新闻|家用电器|
|行业新闻|家用厨具|
| ... | ... |
其中 国内新闻,行业新闻,...是读取 新闻类别表
家用电器,家用厨具,...是读取 产品类别表

这个代码应该怎么写啊 哪个高手给个实例帮下忙,谢谢了

=======================3月28日,更新===================================================
后面我提供了一种方法很笨很笨,也不知道是不是笨,反正我看着都头疼,这两天找资料,泡泡论坛,想到了一个很笨的办法,
现用xmlDataSource作为menu控件的数据源,从而用修改menu.xml的办法来绕圈变相的修改menu控件的菜单项。
因为我的权限不够,不能贴xml代码,只好用个图片,就是
https://bbs.bc-cn.net/viewthread.php?tid=127614 这里面的xml文件,我也找到了方法。
先把更新的贴出来供大家参考。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("Menu.xml"));
XmlNodeList nodeList = xmlDoc.SelectSingleNode("Menu").ChildNodes;//获取bookstore节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
if (xe.GetAttribute("text") == "新闻中心")//如果name属性值为“风云”
{
//xe.SetAttribute("url", "default.aspx");不注释掉不能执行下面的,不知道怎么回事。

////如果下面有子节点在下走
XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach (XmlNode xn1 in nls)//遍历
{
XmlElement xe2 = (XmlElement)xn1;//转换类型
if (xe2.GetAttribute("mytext") == "百度图片")//如果找到
{
xe2.SetAttribute("mytext","新闻");//则修改
break;
}
}
break;
}
}
xmlDoc.Save(Server.MapPath("menu.xml"));//保存


这样就可以更新MENU控件项了,大家还有什么好的方法可以共享下。。。

[此贴子已经被作者于2007-3-28 22:20:49编辑过]

19 回复
#2
HankStar2007-03-27 23:51
明天过来试一试
#3
程序人2007-03-28 00:18
这应该是WinForm应用程序吧,这个没有办法,你只有自己写代码,因为要添加控件(每一项)
#4
tuablove2007-03-28 10:06
不,是在网页中实现的,不是winform ,我也是想自己写代码,但就是不知道怎么让从数据库读取出来的数据按题目的要求遍历menu的child级!
#5
skyland842007-03-28 10:38
不是所有控建都能 数据绑定!这个控建我没有用过!不晓得是否能数据绑定!如果可以的话  那是 可以绑定的!
#6
tuablove2007-03-28 11:35

呵呵 我这也有MENU控件数据库绑定的例子 就是太麻烦了 现在帖出来给大家看看
最好能找到简洁的办法:
protected string GetPopMenu(string AlternatingImage, int RepeatColumns, bool Flow)
{
if (Cache["PopMenu"] != null)
{
return Cache["PopMenu"].ToString();
}
else
{
DataTable MainMenuTable = new DataTable(), PopMenuTable = new DataTable();
SqlConnection Connection = new SqlConnection(DataProvider.ConnectionString);
// 加载菜单数据
SqlCommand Command = new SqlCommand();
Command.Connection = Connection;
Command.CommandText = "Select * From PopMenu Where Parentid=0 Order By Orderid";
SqlDataAdapter DataAdapter = new SqlDataAdapter();
DataAdapter.SelectCommand = Command;
DataAdapter.Fill(MainMenuTable);
Command.CommandText = "Select * From PopMenu Where Parentid>0 Order By Parentid,Orderid"; ;
DataAdapter.Fill(PopMenuTable);
// 清理数据库连接资源
Connection.Dispose();
Command.Dispose();
DataAdapter.Dispose();
// 获取子菜单数据
int Child = 0;
StringBuilder ChildMenu = new StringBuilder();
ChildMenu.Append("\r\n<div id=\"popmenu\" class=\"menuskin\" style=\"z-index:100\" onmouseover=\"clearhidemenu(); highlightmenu(event,'on')\" onmouseout=\"highlightmenu(event,'off'); dynamichide(event)\"></div>\r\n");
ChildMenu.Append("<script language=\"javascript\" type=\"text/javascript\">\r\n");
ChildMenu.Append("<!--\r\n");
for (int i = 0; i < MainMenuTable.Rows.Count; i++)
{
for (int j = 0; j < PopMenuTable.Rows.Count; j++)
{
if (Convert.ToInt32(PopMenuTable.Rows[j]["Parentid"]) == Convert.ToInt32(MainMenuTable.Rows[i]["Menuid"]))
{
if (Child == 0)
{
ChildMenu.Append("\t" + "linkset[" + MainMenuTable.Rows[i]["Menuid"] + "] = new Array();" + Environment.NewLine);
}
ChildMenu.Append("\t" + "linkset[" + MainMenuTable.Rows[i]["Menuid"] + "][" + Child + "] = \"<div class='menuitems'><a" + (PopMenuTable.Rows[j]["MenuUrl"] != DBNull.Value ? " href='" + PopMenuTable.Rows[j]["MenuUrl"] + "'" : null) + " title='" + PopMenuTable.Rows[j]["MenuAlt"] + "'" + (Convert.ToBoolean(PopMenuTable.Rows[j]["Target"]) ? " target='_blank'" : null) + ">" + PopMenuTable.Rows[j]["MenuName"] + "</a></div>\";" + Environment.NewLine);
Child++;
}
}
if (Child > 0)
{
MainMenuTable.Rows[i]["MenuName"] = "<a onmouseover=\"showmenu(event," + MainMenuTable.Rows[i]["Menuid"] + ",1,false)\" onmouseout=\"delayhidemenu()\"" + (MainMenuTable.Rows[i]["MenuUrl"] != DBNull.Value ? " href=\"" + MainMenuTable.Rows[i]["MenuUrl"] + "\"" : null) + " title=\"" + MainMenuTable.Rows[i]["MenuAlt"] + "\"" + (Convert.ToBoolean(MainMenuTable.Rows[i]["Target"]) ? " target=\"_blank\"" : null) + ">" + MainMenuTable.Rows[i]["MenuName"] + "</a>";
Child = 0;
}
else
{
MainMenuTable.Rows[i]["MenuName"] = "<a" + (MainMenuTable.Rows[i]["MenuUrl"] != DBNull.Value ? " href=\"" + MainMenuTable.Rows[i]["MenuUrl"] + "\"" : null) + " title=\"" + MainMenuTable.Rows[i]["MenuAlt"] + "\"" + (Convert.ToBoolean(MainMenuTable.Rows[i]["Target"]) ? " target=\"_blank\"" : null) + ">" + MainMenuTable.Rows[i]["MenuName"] + "</a>";
}
}
ChildMenu.Append("\t" + "jsdone = true;" + Environment.NewLine);
ChildMenu.Append("// -->\r\n");
ChildMenu.Append("</script>" + Environment.NewLine);
// 获取主菜单数据
StringBuilder MainMenu = new StringBuilder();
MainMenu.Append("<script language=\"javascript\" type=\"text/javascript\" src=\"JScript/PopMenu.js\"></script>" + Environment.NewLine);
if (Flow)
{
MainMenu.Append("<span id=\"PopMenuList\">" + Environment.NewLine);
if (AlternatingImage != null && AlternatingImage != "")
{
AlternatingImage = "\t<span><img alt=\"\" src=\"" + AlternatingImage + "\" /></span>" + Environment.NewLine;
}
for (int i = 0; i < MainMenuTable.Rows.Count - 1; i++)
{
MainMenu.Append("\t<span>" + MainMenuTable.Rows[i]["MenuName"] + "</span>" + Environment.NewLine);
if ((i + 1) % RepeatColumns == 0)
{
MainMenu.Append("\t<br />" + Environment.NewLine);
}
else
{
MainMenu.Append(AlternatingImage);
}
}

// Edit By AlphaC 2006-3-21 18:20
//MainMenu.Append("\t<span>" + MainMenuTable.Rows[MainMenuTable.Rows.Count - 1]["MenuName"] + "</span>" + Environment.NewLine);

if(MainMenuTable.Rows.Count > 0)
MainMenu.Append("\t<span>" + MainMenuTable.Rows[MainMenuTable.Rows.Count - 1]["MenuName"] + "</span>" + Environment.NewLine);

MainMenu.Append("</span>" + Environment.NewLine);
}
else
{
MainMenu.Append("<table id=\"PopMenuList\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">" + Environment.NewLine);
MainMenu.Append("\t<tr>" + Environment.NewLine);
if (AlternatingImage != null && AlternatingImage != "")
{
AlternatingImage = "\t\t<td align=\"center\"><img alt=\"\" src=\"" + AlternatingImage + "\" /></td>" + Environment.NewLine;
}
for (int i = 0; i < MainMenuTable.Rows.Count - 1; i++)
{
MainMenu.Append("\t\t<td align=\"center\">" + MainMenuTable.Rows[i]["MenuName"] + "</td>" + Environment.NewLine);
if ((i + 1) % RepeatColumns == 0)
{
MainMenu.Append("\t</tr>" + Environment.NewLine);
MainMenu.Append("\t<tr>" + Environment.NewLine);
}
else
{
MainMenu.Append(AlternatingImage);
}
}
MainMenu.Append("\t\t<td align=\"center\">" + MainMenuTable.Rows[MainMenuTable.Rows.Count - 1]["MenuName"] + "</td>" + Environment.NewLine);
for (int i = 0; i < MainMenuTable.Rows.Count % RepeatColumns; i++)
{
MainMenu.Append(AlternatingImage);
MainMenu.Append("\t\t<td align=\"center\">&nbsp;</td>" + Environment.NewLine);
}
MainMenu.Append("\t</tr>" + Environment.NewLine);
MainMenu.Append("</table>" + Environment.NewLine);
}
// 建立缓存
Cache["PopMenu"] = MainMenu.ToString() + ChildMenu.ToString();
return MainMenu.ToString() + ChildMenu.ToString();
}
}

#7
HankStar2007-03-28 12:19
好像有点麻烦的样子~

我去按照自己的思路去写一下看看~
#8
bygg2007-03-28 12:51
我想知道你的数据库是怎么设计的...
#9
tuablove2007-03-28 16:12

数据库的设计
两个表:newsStor(newsStor_id,newsStor_name)
productStor(ProStor_id,ProStor_name)

#10
Kendy1234562007-03-28 16:15

这个问题好像和winform或者webform没有关系呀
不管哪个form 绑上去都是用相同的方式
虽然我也不知道怎么绑

#11
mldark2007-03-28 16:23
这个问题 用绑定吧 我只有这么说  不知道你设计怎么样数据库
#12
重在参与2007-03-28 16:33
菜单用HTML写呗,用JavaScript脚本.然后每项子菜单都链接到一个网页,在那个网页中做事.为什么非要在菜单上绑定数据库,菜单项只不过是一个单击事件而已.
#13
bygg2007-03-28 16:50
为什么要设计两个表呢??一个表不就可以了吗?
#14
tuablove2007-03-28 18:45
因为是要从两个不同的数据库里读取东西啊
只要添加了新闻的类别,或者添加产品的类别就能自动在Menu控件里显示出来~!
#15
HankStar2007-03-28 20:27
我已经有思路了~~~呵呵~我去弄一下~~
#16
tuablove2007-03-28 20:59
那谢谢了HankStar  看你的了
#17
tuablove2007-03-28 22:22
帖子别沉了,最新更新,在楼主看
#18
HankStar2007-03-28 23:50
<?xml version="1.0" encoding="utf-8" ?>
<Newdataset>
<Table name="新闻中心" url="">
<son name="行业新闻" url=""/>
<son name="国内新闻" url=""/>
</Table >
<Table name="产品中心" url="">
<son name="家用电器" url=""/>
<son name="家用厨具" url=""/>
</Table>
</Newdataset>

然后进入这个地址:
http://blog.csdn.net/cmoonc/archive/2007/01/08/1477469.aspx

#19
HankStar2007-03-29 00:18
做出来了~通过页面添加~~~

明天我整理出来~~就发出去~
#20
tuablove2007-03-29 10:15
谢谢了,你整理的帖子看了,终于解决了
1