100分--asp.net menu如何从数据库中读取数据来生成menu,急!!! treeview可以实现读数据库生成,但是menu不知道如何生成。在快速如门中只有用xml生成的,做过的麻烦给个实例阿http://beta.asp.net/QUICKSTART/aspnet/doc/ctrlref/navigation/menu.aspx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static DataTable ReadMainMenuData() { DataRow dr; DataTable dt=new DataTable(); dt.Columns.Add(new DataColumn("Text",typeof(string))); dt.Columns.Add(new DataColumn("ImageUrl",typeof(string))); dt.Columns.Add(new DataColumn("TargetUrl",typeof(string))); dr=dt.NewRow(); dr[0]="File"; dr[1]="../../../UI/Images/Organization.gif"; dr[2]="../../../UI/Images/Organization.gif"; dt.Rows.Add(dr); dr=dt.NewRow(); dr[0]="Edit"; dr[1]="../../../UI/Images/settings.gif"; dr[2]="../../../UI/Images/settings.gif"; dt.Rows.Add(dr); return dt; } public static DataTable ReadSubMenuData() { DataRow dr; DataTable dt=new DataTable(); dt.Columns.Add(new DataColumn("Text",typeof(string))); dt.Columns.Add(new DataColumn("ImageUrl",typeof(string))); dt.Columns.Add(new DataColumn("TargetUrl",typeof(string))); dr=dt.NewRow(); dr[0]="submenu1"; dr[1]="../../../UI/Images/Organization.gif"; dr[2]="../../../UI/Images/Organization.gif"; dt.Rows.Add(dr); dr=dt.NewRow(); dr[0]="submenu2"; dr[1]="../../../UI/Images/settings.gif"; dr[2]="../../../UI/Images/settings.gif"; dt.Rows.Add(dr); return dt; }把上面的两个假数据换成实际的从数据库读取,把下面的Infragistics控件的menu换成你自己的menu,稍稍改一下就可以了在load中调用如下方法 DataTable dt=ReadMainMenuData(); DataTable dtsub=ReadSubMenuData(); for(int i=0;i<dt.Rows.Count;i++) { Infragistics.WebUI.UltraWebNavigator.Item item=new Infragistics.WebUI.UltraWebNavigator.Item(); item.Text=dt.Rows[i]["Text"].ToString(); item.ImageUrl=dt.Rows[i]["ImageUrl"].ToString(); item.TargetUrl=dt.Rows[i]["TargetUrl"].ToString(); item.Style.Width=System.Web.UI.WebControls.Unit.Pixel(20); for(int j=0;j<dtsub.Rows.Count;j++) { Infragistics.WebUI.UltraWebNavigator.Item subitem=new Infragistics.WebUI.UltraWebNavigator.Item(); subitem.Text=dtsub.Rows[j]["Text"].ToString(); subitem.ImageUrl=dtsub.Rows[j]["ImageUrl"].ToString(); subitem.TargetUrl=dtsub.Rows[j]["TargetUrl"].ToString(); item.Items.Add(subitem); } UltraWebMenu1.Items.Add(item); } 需要的menu最多有4层,层数不定,能用递归的办法么 这个强,如果谁有个IE WEB控件中4个的结合实例就好了 singlepine(小山) 的代码在asp.net2.0里面改一下了还可以用,不过要是按你说的那样,那就要大改了哦 我照着人家做treeview的递归改了一下,可以用, private void bindmenu(MenuItemCollection MIC, string depid) { DataSet ds = bindds();//获取DataSet,具体代码略 DataView dv = ds.Tables["Users"].DefaultView; dv.RowFilter = "ParentID=" + depid; string strID; foreach (DataRowView dr in dv) { MenuItem mi = new MenuItem(); mi.Value = dr["UserID"].ToString(); strID = dr["UserID"].ToString(); mi.Text = dr["UserName"].ToString(); MIC.Add(mi); bindmenu(MIC[MIC.Count-1].ChildItems , strID); } } 楼上得不错, 不过每次递归斗要重新设置dataset,会不会很占内存阿 .net中 DataTable select问题,求助! 求推荐 hyp.Attributes.Add("OnClick", 提示网页上有错误,是怎么回事啊 关于 ASP.Net 查询后分页 求高手解答 求一大型房地产网站的数据库构架 高手过来看,是什么原因?100向送 方法与委托不匹配 关于TREEVIEW 高分,....在线等........解决马上结贴...........简单问题 asp.net页中如何调用客户机的当前时间 一个小问题:Session和cookie区别,路过的进来说点经验哈~~ DataGrid问题
{
DataRow dr;
DataTable dt=new DataTable();
dt.Columns.Add(new DataColumn("Text",typeof(string)));
dt.Columns.Add(new DataColumn("ImageUrl",typeof(string)));
dt.Columns.Add(new DataColumn("TargetUrl",typeof(string)));
dr=dt.NewRow();
dr[0]="File";
dr[1]="../../../UI/Images/Organization.gif";
dr[2]="../../../UI/Images/Organization.gif";
dt.Rows.Add(dr);
dr=dt.NewRow();
dr[0]="Edit";
dr[1]="../../../UI/Images/settings.gif";
dr[2]="../../../UI/Images/settings.gif";
dt.Rows.Add(dr);
return dt;
} public static DataTable ReadSubMenuData()
{
DataRow dr;
DataTable dt=new DataTable();
dt.Columns.Add(new DataColumn("Text",typeof(string)));
dt.Columns.Add(new DataColumn("ImageUrl",typeof(string)));
dt.Columns.Add(new DataColumn("TargetUrl",typeof(string)));
dr=dt.NewRow();
dr[0]="submenu1";
dr[1]="../../../UI/Images/Organization.gif";
dr[2]="../../../UI/Images/Organization.gif";
dt.Rows.Add(dr);
dr=dt.NewRow();
dr[0]="submenu2";
dr[1]="../../../UI/Images/settings.gif";
dr[2]="../../../UI/Images/settings.gif";
dt.Rows.Add(dr);
return dt;
}
把上面的两个假数据换成实际的从数据库读取,把下面的Infragistics控件的menu换成你自己的menu,稍稍改一下就可以了
在load中调用如下方法
DataTable dt=ReadMainMenuData();
DataTable dtsub=ReadSubMenuData();
for(int i=0;i<dt.Rows.Count;i++)
{
Infragistics.WebUI.UltraWebNavigator.Item item=new Infragistics.WebUI.UltraWebNavigator.Item();
item.Text=dt.Rows[i]["Text"].ToString();
item.ImageUrl=dt.Rows[i]["ImageUrl"].ToString();
item.TargetUrl=dt.Rows[i]["TargetUrl"].ToString();
item.Style.Width=System.Web.UI.WebControls.Unit.Pixel(20);
for(int j=0;j<dtsub.Rows.Count;j++)
{
Infragistics.WebUI.UltraWebNavigator.Item subitem=new Infragistics.WebUI.UltraWebNavigator.Item();
subitem.Text=dtsub.Rows[j]["Text"].ToString();
subitem.ImageUrl=dtsub.Rows[j]["ImageUrl"].ToString();
subitem.TargetUrl=dtsub.Rows[j]["TargetUrl"].ToString();
item.Items.Add(subitem);
}
UltraWebMenu1.Items.Add(item);
}
的代码在asp.net2.0里面改一下了还可以用,不过要是按你说的那样,那就要大改了哦
private void bindmenu(MenuItemCollection MIC, string depid)
{
DataSet ds = bindds();//获取DataSet,具体代码略
DataView dv = ds.Tables["Users"].DefaultView;
dv.RowFilter = "ParentID=" + depid;
string strID;
foreach (DataRowView dr in dv)
{
MenuItem mi = new MenuItem();
mi.Value = dr["UserID"].ToString();
strID = dr["UserID"].ToString();
mi.Text = dr["UserName"].ToString();
MIC.Add(mi);
bindmenu(MIC[MIC.Count-1].ChildItems , strID);
}
}