下面是我的需求:
假设前台文件为 index.aspx, 我需要下拉菜单的代码在 index.aspx.cs 中完成. 然后在前台文件index.aspx中的Label或者span啊控件中显示出来. 不是显示在DropdownList中的. Dropdownlist的我自己已经解决了.
我卡在这卡死了,诚请各位大哥大姐给我一个例子吧. 55555555555555
感激涕零!
25 个解决方案
#1
如题,一解决便立刻结贴, 先谢过各位所有路过些贴的朋友.
#2
给Label赋值不就行了吗?不太明白你的意思
#3
<%@ Page Language="C#" %>
<html>
<!-- ASP.NET 2.0的例子 -->
<head runat="server">
</head>
<body>
<form runat="server">
<h3>下拉菜单的例子</h3>
<!-- Use declarative syntax to create the -->
<!-- menu structure. Submenu items are -->
<!-- created by nesting them in parent menu -->
<!-- items. -->
<asp:menu id="NavigationMenu"
disappearafter="2000"
staticdisplaylevels="2"
staticsubmenuindent="10"
orientation="Horizontal"
font-names="Arial"
target="_blank"
runat="server">
<staticmenuitemstyle backcolor="#DDDDDD"
forecolor="red"/>
<statichoverstyle backcolor="#DDDDDD"/>
<dynamicmenuitemstyle backcolor="#EEEEEE"
forecolor="red"/>
<dynamichoverstyle backcolor="#DDDDDD"
forecolor="Black"/>
<items>
<asp:menuitem navigateurl="http://dotnet.aspx.cc/"
text="首页"
tooltip="首页">
<asp:menuitem navigateurl="http://dotnet.aspx.cc/ShowList.aspx?id=1"
text="ASP.NET 栏目"
tooltip="ASP.NET 栏目">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Rock.aspx"
text="ASP.NET 问与答"
tooltip="ASP.NET 问与答">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
</asp:menuitem>
<asp:menuitem navigateurl="Jazz.aspx"
text="Jazz"
tooltip="Jazz"/>
</asp:menuitem>
<asp:menuitem navigateurl="Movies.aspx"
text="Movies"
tooltip="Movies">
<asp:menuitem navigateurl="Action.aspx"
text="Action"
tooltip="Action">
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
</asp:menuitem>
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
<asp:menuitem navigateurl="Musical.aspx"
text="Musical"
tooltip="Musical"/>
</asp:menuitem>
</asp:menuitem>
</items>
</asp:menu>
</form>
</body>
</html>
<html>
<!-- ASP.NET 2.0的例子 -->
<head runat="server">
</head>
<body>
<form runat="server">
<h3>下拉菜单的例子</h3>
<!-- Use declarative syntax to create the -->
<!-- menu structure. Submenu items are -->
<!-- created by nesting them in parent menu -->
<!-- items. -->
<asp:menu id="NavigationMenu"
disappearafter="2000"
staticdisplaylevels="2"
staticsubmenuindent="10"
orientation="Horizontal"
font-names="Arial"
target="_blank"
runat="server">
<staticmenuitemstyle backcolor="#DDDDDD"
forecolor="red"/>
<statichoverstyle backcolor="#DDDDDD"/>
<dynamicmenuitemstyle backcolor="#EEEEEE"
forecolor="red"/>
<dynamichoverstyle backcolor="#DDDDDD"
forecolor="Black"/>
<items>
<asp:menuitem navigateurl="http://dotnet.aspx.cc/"
text="首页"
tooltip="首页">
<asp:menuitem navigateurl="http://dotnet.aspx.cc/ShowList.aspx?id=1"
text="ASP.NET 栏目"
tooltip="ASP.NET 栏目">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Rock.aspx"
text="ASP.NET 问与答"
tooltip="ASP.NET 问与答">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
</asp:menuitem>
<asp:menuitem navigateurl="Jazz.aspx"
text="Jazz"
tooltip="Jazz"/>
</asp:menuitem>
<asp:menuitem navigateurl="Movies.aspx"
text="Movies"
tooltip="Movies">
<asp:menuitem navigateurl="Action.aspx"
text="Action"
tooltip="Action">
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
</asp:menuitem>
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
<asp:menuitem navigateurl="Musical.aspx"
text="Musical"
tooltip="Musical"/>
</asp:menuitem>
</asp:menuitem>
</items>
</asp:menu>
</form>
</body>
</html>
#4
是的,是要给Label控件赋值,我用Label.InnerHtml 或者是InnerText 都没有得到结果.
我的意思是在index.aspx.cs 文件中,写下无限级下拉菜单的代码,然后前台的页面,也就是index.aspx中的Label控件将它调用出来的这一整个过程.
能帮我在index.aspx.cs中的设计过程写出来吗?
无限级一般好象要用到递归吧?递归不算很难,可是我是新手,难在不知道怎么样用asp.net的语法将过程 呈现出来,以及怎么样在前台页面将后台C#页面的过程调用出来.
谢谢所有路过的人.
我的意思是在index.aspx.cs 文件中,写下无限级下拉菜单的代码,然后前台的页面,也就是index.aspx中的Label控件将它调用出来的这一整个过程.
能帮我在index.aspx.cs中的设计过程写出来吗?
无限级一般好象要用到递归吧?递归不算很难,可是我是新手,难在不知道怎么样用asp.net的语法将过程 呈现出来,以及怎么样在前台页面将后台C#页面的过程调用出来.
谢谢所有路过的人.
#5
To: liuredstar(Flying)
首先,很感谢您对我的帮助,但是也很遗憾,您的例子如果我没有说错的话,应该是使用了控件的.
但这并不是我真正需要的,我需要的是清楚的过程代码.
另外:这个无限级下拉菜单是通过调用数据库中的数据进行无限级下拉的.
首先,很感谢您对我的帮助,但是也很遗憾,您的例子如果我没有说错的话,应该是使用了控件的.
但这并不是我真正需要的,我需要的是清楚的过程代码.
另外:这个无限级下拉菜单是通过调用数据库中的数据进行无限级下拉的.
#6
申明为public之后前台就可以调用了嘛
public string aa()
{
}
public string aa()
{
}
#7
To: chenzhuo(灼)
您说得很是. 可是我在.net上经验严重不足,算法,或者说我在做的过程中的思路都是已经有了.也知道如何使用递归进行遍历呈现,但是我的困难点在于: 由于.net语法的不行,以至于当我用.net来描述我心中的算法的过程时,遇到了写不出来的情况.
简单的说:就是我心中明明知道可以这样子来实现,但是苦于我语言不通,而无法表述出来.
这好比:我是中国人,但我不会法语. 我希望将我心中的想法通过法语这种语言来描述出来时却遇到了困难.
您说得很是. 可是我在.net上经验严重不足,算法,或者说我在做的过程中的思路都是已经有了.也知道如何使用递归进行遍历呈现,但是我的困难点在于: 由于.net语法的不行,以至于当我用.net来描述我心中的算法的过程时,遇到了写不出来的情况.
简单的说:就是我心中明明知道可以这样子来实现,但是苦于我语言不通,而无法表述出来.
这好比:我是中国人,但我不会法语. 我希望将我心中的想法通过法语这种语言来描述出来时却遇到了困难.
#8
那就买本C#的书好好做练习了!我也不熟,还不明白你这里的无限级是什么意思?
是不是从数据库里面读取自己填充,还有就是你这个LABEL又怎么做成下拉菜单啊?
是不是从数据库里面读取自己填充,还有就是你这个LABEL又怎么做成下拉菜单啊?
#9
Label不行的话,可以使用Span之类, 反正最终目的就是在前台页面上进行 "文本形式" 的方式呈现无限级下拉菜单的结果. 而非 "dropdownlist" 之类方式的呈现.
#10
去网上载个菜单导航控件
http://cnzc.cnblogs.com/archive/2004/09/29/47797.html
在ASP.NET页面中使用SolpartMenu控http://www.ccw.com.cn/htm/center/prog/02_12_12_2.asp
下载地址:http://www.solpart.com/techcorner/SolpartMenuHistory.aspx
http://cnzc.cnblogs.com/archive/2004/09/29/47797.html
在ASP.NET页面中使用SolpartMenu控http://www.ccw.com.cn/htm/center/prog/02_12_12_2.asp
下载地址:http://www.solpart.com/techcorner/SolpartMenuHistory.aspx
#11
这样说的话可能就要用JavaScript做了!
#12
最好用javaScript 做会好一点
#13
js方案,在讨论有朋友好心与我提过,但我所使用的是.net+C#, 一方面,我的js能力不强.
另一方面,我并不认为使用js来设计会使问题更有效和快速. 第三,整个下拉菜单需要通过数据库的*添加来*展开的.
很感谢 chenzhuo(灼) 以及 menuvb(戏子……www.zfans.net) 的建议,但我仍然希望通过在这里通过大家的帮助寻求更积极的方法.
另一方面,我并不认为使用js来设计会使问题更有效和快速. 第三,整个下拉菜单需要通过数据库的*添加来*展开的.
很感谢 chenzhuo(灼) 以及 menuvb(戏子……www.zfans.net) 的建议,但我仍然希望通过在这里通过大家的帮助寻求更积极的方法.
#14
嘿嘿!。NET+C#还是一样可以使用JS,现在做WEB方面的,谁有用就用谁啊,相结合嘛,而且JS也有人家写好的JS文件可以找找看,我也想不用JS做的,如果你找到这种方法的话记得要告诉我哦!
#15
下面这段代码是我自己所写的关于无限级下单菜单的代码,但由于我的能力的差劲,使得我用这么美妙的语言写下来的却是乱七八糟的代码,并导致了严重的后果:不能运行.
请各位高手帮我分析一下也行的,倍当感激:
先说一下编译所报的错误:
Wap.Admin.Resources.__Left.ShowChildMenuList(int):并非所有的代码路径都返回值. 出错位置在ShowChildMenuList(int)函数所在行上.
前台index.aspx上的是Label控件,并且我将之命名为Label1,所以可以使用Label1.Text.
那么,下面就是代码:
/// <summary>
/// ShowMenuList 显示该资源栏目列表。
/// </summary>
/// <param name="ID">该资源栏目的ID号</param>
///
protected void ShowMenuList(int ID)
{
SqlDataAdapter myAdapter = new SqlDataAdapter("Select Source_ParetID,Source_CName From Resources Where Source_ID = " + ID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"第一级栏目");
for (int i = 0; i < ds.Tables["第一级栏目"].Rows.Count - 1; i++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ID + "&Source_ParetID=" + ds.Tables["第一级栏目"].Rows[i].ItemArray[0] + " target=Source_main>+" + ds.Tables["第一级栏目"].Rows[i].ItemArray[1] + "</a>";
ShowChildMenuList(ID);
}
return;
}
/// <summary>
/// ShowMenuList 显示该资源 子栏目列表。
/// </summary>
/// <param name="ParentID">父ID</param>
private string ShowChildMenuList(int ParentID)
{
string strShowMenuList;
SqlDataAdapter myAdapter= new SqlDataAdapter("Select Source_ID,Source_CName From Resources Where Source_ParetID = " + ParentID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"呈现子栏目");
if (ds.Tables["呈现子栏目"].Rows.Count == 0)
{
//Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
}
else
{
for (int ii=0;ii<=(ds.Tables["Resources"].Rows.Count - 1);ii++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
Label1.Text += ShowChildMenuList(Convert.ToInt32(ds.Tables["Resources"].Rows[ii].ItemArray[0]));
}
}
}
请各位高手帮我分析一下也行的,倍当感激:
先说一下编译所报的错误:
Wap.Admin.Resources.__Left.ShowChildMenuList(int):并非所有的代码路径都返回值. 出错位置在ShowChildMenuList(int)函数所在行上.
前台index.aspx上的是Label控件,并且我将之命名为Label1,所以可以使用Label1.Text.
那么,下面就是代码:
/// <summary>
/// ShowMenuList 显示该资源栏目列表。
/// </summary>
/// <param name="ID">该资源栏目的ID号</param>
///
protected void ShowMenuList(int ID)
{
SqlDataAdapter myAdapter = new SqlDataAdapter("Select Source_ParetID,Source_CName From Resources Where Source_ID = " + ID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"第一级栏目");
for (int i = 0; i < ds.Tables["第一级栏目"].Rows.Count - 1; i++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ID + "&Source_ParetID=" + ds.Tables["第一级栏目"].Rows[i].ItemArray[0] + " target=Source_main>+" + ds.Tables["第一级栏目"].Rows[i].ItemArray[1] + "</a>";
ShowChildMenuList(ID);
}
return;
}
/// <summary>
/// ShowMenuList 显示该资源 子栏目列表。
/// </summary>
/// <param name="ParentID">父ID</param>
private string ShowChildMenuList(int ParentID)
{
string strShowMenuList;
SqlDataAdapter myAdapter= new SqlDataAdapter("Select Source_ID,Source_CName From Resources Where Source_ParetID = " + ParentID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"呈现子栏目");
if (ds.Tables["呈现子栏目"].Rows.Count == 0)
{
//Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
}
else
{
for (int ii=0;ii<=(ds.Tables["Resources"].Rows.Count - 1);ii++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
Label1.Text += ShowChildMenuList(Convert.ToInt32(ds.Tables["Resources"].Rows[ii].ItemArray[0]));
}
}
}
#16
看不是很明白~~~
#17
oh no,用一个DataList控件来做多好啊!
#18
oh no,用一个DataList控件来做多好啊!
=============================================================
DataList 可以进行无限级显示吗?如果可以,怎么样实现呢?
DataList 所呈现的不是 网格 的数据吗?
=============================================================
DataList 可以进行无限级显示吗?如果可以,怎么样实现呢?
DataList 所呈现的不是 网格 的数据吗?
#19
还是用JS吧,最好的选择.
用服务器的太浪费资源.
要用服务器的我以前写过.那时候对JS不熟.不过..我的只有两层..不是无限级.
用的是ASP...现在说了也白说,代码全没了.
用服务器的太浪费资源.
要用服务器的我以前写过.那时候对JS不熟.不过..我的只有两层..不是无限级.
用的是ASP...现在说了也白说,代码全没了.
#20
To:yilan505(蓝衣紫痕)
我对ASP比较熟练, 如果是ASP来实现的话, 我自信能够很快就其解决完毕.
但是我的主要原因 是因为我对.net的不熟练,导致了我在编写过程中无法将我的想法、或者说是无法将算法付之于在.net上的实现,这是我所苦恼的根结所在.
我对ASP比较熟练, 如果是ASP来实现的话, 我自信能够很快就其解决完毕.
但是我的主要原因 是因为我对.net的不熟练,导致了我在编写过程中无法将我的想法、或者说是无法将算法付之于在.net上的实现,这是我所苦恼的根结所在.
#21
我做的,绝对可以运行,自己参考一下
/*****************************************************************************************
* 显示下拉树型菜单(数据绑定DropDownList)
* ****************************************************************************************/
con.Open();
str_Sql="select * from PE_Class where ChannelID="+arrChannelID+" order by RootID,OrderID ";
SqlCommand cmd = new SqlCommand(str_Sql,con);
dr=cmd.ExecuteReader();
//普通dropdownlist绑定
// ddlParentID.DataTextField="ClassName";
// ddlParentID.DataValueField="ClassID";
// ddlParentID.DataSource=dr;
// ddlParentID.DataBind();
// con.Close();
if(!this.IsPostBack)
{
//初始化arrShowLine 不能放在循环体里面
//arrShowLine 功能:循环体第i次循环判断,如果i=false,显示"│",否则显示" "
bool[] arrShowLine=new bool[21];
for(int i=0;i<arrShowLine.Length;i++)
{
arrShowLine[i]=false;
}
//添加特定Item时这样绑定(这里添加多一个“无(做为一级栏目)”的选择,不在数据库读取的)
//且根据接收的Depth判断他的深度
//ddlParentID.Items.Add(new ListItem("无(做为一级栏目)","0"));
while ( dr.Read() )
{
int tmpDepth=(int)dr["Depth"];
//调用arrShowLine
int tmpNextID=(int)dr["NextID"];
if (tmpNextID>0)
{
arrShowLine[tmpDepth]=true;
}
else
{
arrShowLine[tmpDepth]=false;
}
//子栏目输出方式
if (tmpDepth>0)
{
string strTemp="";
for(int i=1;i<tmpDepth+1;i++)
{
strTemp=strTemp+" ";
if(i==tmpDepth)
{
if((int)dr["NextID"]>0)
{
strTemp=strTemp+"├ ";
}
else
{
strTemp=strTemp+"└ ";
}
}
else
{
if (arrShowLine[i]==true)
//输入if (i==3)表示第三次循环显示"│",可以试一下
{
strTemp=strTemp+"│";
}
else
{
strTemp=strTemp+" ";
}
}
}
strTemp=strTemp+dr["ClassName"].ToString();
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
strTemp=strTemp+"(外)";
}
//
ddlParentID.Items.Add(new ListItem(HttpUtility.HtmlDecode(strTemp),dr["ClassID"].ToString() ));
}
//跟栏目输出方式
else
{
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString()+"(外)",dr["ClassID"].ToString() ));
}
else
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString(),dr["ClassID"].ToString() ));
}
}
}
}
con.Close();
/*****************************************************************************************
* 显示下拉树型菜单(数据绑定DropDownList)
* ****************************************************************************************/
con.Open();
str_Sql="select * from PE_Class where ChannelID="+arrChannelID+" order by RootID,OrderID ";
SqlCommand cmd = new SqlCommand(str_Sql,con);
dr=cmd.ExecuteReader();
//普通dropdownlist绑定
// ddlParentID.DataTextField="ClassName";
// ddlParentID.DataValueField="ClassID";
// ddlParentID.DataSource=dr;
// ddlParentID.DataBind();
// con.Close();
if(!this.IsPostBack)
{
//初始化arrShowLine 不能放在循环体里面
//arrShowLine 功能:循环体第i次循环判断,如果i=false,显示"│",否则显示" "
bool[] arrShowLine=new bool[21];
for(int i=0;i<arrShowLine.Length;i++)
{
arrShowLine[i]=false;
}
//添加特定Item时这样绑定(这里添加多一个“无(做为一级栏目)”的选择,不在数据库读取的)
//且根据接收的Depth判断他的深度
//ddlParentID.Items.Add(new ListItem("无(做为一级栏目)","0"));
while ( dr.Read() )
{
int tmpDepth=(int)dr["Depth"];
//调用arrShowLine
int tmpNextID=(int)dr["NextID"];
if (tmpNextID>0)
{
arrShowLine[tmpDepth]=true;
}
else
{
arrShowLine[tmpDepth]=false;
}
//子栏目输出方式
if (tmpDepth>0)
{
string strTemp="";
for(int i=1;i<tmpDepth+1;i++)
{
strTemp=strTemp+" ";
if(i==tmpDepth)
{
if((int)dr["NextID"]>0)
{
strTemp=strTemp+"├ ";
}
else
{
strTemp=strTemp+"└ ";
}
}
else
{
if (arrShowLine[i]==true)
//输入if (i==3)表示第三次循环显示"│",可以试一下
{
strTemp=strTemp+"│";
}
else
{
strTemp=strTemp+" ";
}
}
}
strTemp=strTemp+dr["ClassName"].ToString();
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
strTemp=strTemp+"(外)";
}
//
ddlParentID.Items.Add(new ListItem(HttpUtility.HtmlDecode(strTemp),dr["ClassID"].ToString() ));
}
//跟栏目输出方式
else
{
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString()+"(外)",dr["ClassID"].ToString() ));
}
else
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString(),dr["ClassID"].ToString() ));
}
}
}
}
con.Close();
#22
http://singlepine.cnblogs.com/articles/259955.html
#23
很感谢 lzt7((分头诗人)http://www.lzt7.com) 及 singlepine(小山) 朋友。
感谢所有参与本贴讨论的朋友。
祝福你们天天开心,时时快乐。
那么本贴就结了吧。
感谢所有参与本贴讨论的朋友。
祝福你们天天开心,时时快乐。
那么本贴就结了吧。
#24
fsd
#25
f
#1
如题,一解决便立刻结贴, 先谢过各位所有路过些贴的朋友.
#2
给Label赋值不就行了吗?不太明白你的意思
#3
<%@ Page Language="C#" %>
<html>
<!-- ASP.NET 2.0的例子 -->
<head runat="server">
</head>
<body>
<form runat="server">
<h3>下拉菜单的例子</h3>
<!-- Use declarative syntax to create the -->
<!-- menu structure. Submenu items are -->
<!-- created by nesting them in parent menu -->
<!-- items. -->
<asp:menu id="NavigationMenu"
disappearafter="2000"
staticdisplaylevels="2"
staticsubmenuindent="10"
orientation="Horizontal"
font-names="Arial"
target="_blank"
runat="server">
<staticmenuitemstyle backcolor="#DDDDDD"
forecolor="red"/>
<statichoverstyle backcolor="#DDDDDD"/>
<dynamicmenuitemstyle backcolor="#EEEEEE"
forecolor="red"/>
<dynamichoverstyle backcolor="#DDDDDD"
forecolor="Black"/>
<items>
<asp:menuitem navigateurl="http://dotnet.aspx.cc/"
text="首页"
tooltip="首页">
<asp:menuitem navigateurl="http://dotnet.aspx.cc/ShowList.aspx?id=1"
text="ASP.NET 栏目"
tooltip="ASP.NET 栏目">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Rock.aspx"
text="ASP.NET 问与答"
tooltip="ASP.NET 问与答">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
</asp:menuitem>
<asp:menuitem navigateurl="Jazz.aspx"
text="Jazz"
tooltip="Jazz"/>
</asp:menuitem>
<asp:menuitem navigateurl="Movies.aspx"
text="Movies"
tooltip="Movies">
<asp:menuitem navigateurl="Action.aspx"
text="Action"
tooltip="Action">
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
</asp:menuitem>
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
<asp:menuitem navigateurl="Musical.aspx"
text="Musical"
tooltip="Musical"/>
</asp:menuitem>
</asp:menuitem>
</items>
</asp:menu>
</form>
</body>
</html>
<html>
<!-- ASP.NET 2.0的例子 -->
<head runat="server">
</head>
<body>
<form runat="server">
<h3>下拉菜单的例子</h3>
<!-- Use declarative syntax to create the -->
<!-- menu structure. Submenu items are -->
<!-- created by nesting them in parent menu -->
<!-- items. -->
<asp:menu id="NavigationMenu"
disappearafter="2000"
staticdisplaylevels="2"
staticsubmenuindent="10"
orientation="Horizontal"
font-names="Arial"
target="_blank"
runat="server">
<staticmenuitemstyle backcolor="#DDDDDD"
forecolor="red"/>
<statichoverstyle backcolor="#DDDDDD"/>
<dynamicmenuitemstyle backcolor="#EEEEEE"
forecolor="red"/>
<dynamichoverstyle backcolor="#DDDDDD"
forecolor="Black"/>
<items>
<asp:menuitem navigateurl="http://dotnet.aspx.cc/"
text="首页"
tooltip="首页">
<asp:menuitem navigateurl="http://dotnet.aspx.cc/ShowList.aspx?id=1"
text="ASP.NET 栏目"
tooltip="ASP.NET 栏目">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Rock.aspx"
text="ASP.NET 问与答"
tooltip="ASP.NET 问与答">
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
<asp:menuitem navigateurl="Classical.aspx"
text="ASP.NET 最新文章"
tooltip="ASP.NET 最新文章"/>
</asp:menuitem>
<asp:menuitem navigateurl="Jazz.aspx"
text="Jazz"
tooltip="Jazz"/>
</asp:menuitem>
<asp:menuitem navigateurl="Movies.aspx"
text="Movies"
tooltip="Movies">
<asp:menuitem navigateurl="Action.aspx"
text="Action"
tooltip="Action">
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
</asp:menuitem>
<asp:menuitem navigateurl="Drama.aspx"
text="Drama"
tooltip="Drama"/>
<asp:menuitem navigateurl="Musical.aspx"
text="Musical"
tooltip="Musical"/>
</asp:menuitem>
</asp:menuitem>
</items>
</asp:menu>
</form>
</body>
</html>
#4
是的,是要给Label控件赋值,我用Label.InnerHtml 或者是InnerText 都没有得到结果.
我的意思是在index.aspx.cs 文件中,写下无限级下拉菜单的代码,然后前台的页面,也就是index.aspx中的Label控件将它调用出来的这一整个过程.
能帮我在index.aspx.cs中的设计过程写出来吗?
无限级一般好象要用到递归吧?递归不算很难,可是我是新手,难在不知道怎么样用asp.net的语法将过程 呈现出来,以及怎么样在前台页面将后台C#页面的过程调用出来.
谢谢所有路过的人.
我的意思是在index.aspx.cs 文件中,写下无限级下拉菜单的代码,然后前台的页面,也就是index.aspx中的Label控件将它调用出来的这一整个过程.
能帮我在index.aspx.cs中的设计过程写出来吗?
无限级一般好象要用到递归吧?递归不算很难,可是我是新手,难在不知道怎么样用asp.net的语法将过程 呈现出来,以及怎么样在前台页面将后台C#页面的过程调用出来.
谢谢所有路过的人.
#5
To: liuredstar(Flying)
首先,很感谢您对我的帮助,但是也很遗憾,您的例子如果我没有说错的话,应该是使用了控件的.
但这并不是我真正需要的,我需要的是清楚的过程代码.
另外:这个无限级下拉菜单是通过调用数据库中的数据进行无限级下拉的.
首先,很感谢您对我的帮助,但是也很遗憾,您的例子如果我没有说错的话,应该是使用了控件的.
但这并不是我真正需要的,我需要的是清楚的过程代码.
另外:这个无限级下拉菜单是通过调用数据库中的数据进行无限级下拉的.
#6
申明为public之后前台就可以调用了嘛
public string aa()
{
}
public string aa()
{
}
#7
To: chenzhuo(灼)
您说得很是. 可是我在.net上经验严重不足,算法,或者说我在做的过程中的思路都是已经有了.也知道如何使用递归进行遍历呈现,但是我的困难点在于: 由于.net语法的不行,以至于当我用.net来描述我心中的算法的过程时,遇到了写不出来的情况.
简单的说:就是我心中明明知道可以这样子来实现,但是苦于我语言不通,而无法表述出来.
这好比:我是中国人,但我不会法语. 我希望将我心中的想法通过法语这种语言来描述出来时却遇到了困难.
您说得很是. 可是我在.net上经验严重不足,算法,或者说我在做的过程中的思路都是已经有了.也知道如何使用递归进行遍历呈现,但是我的困难点在于: 由于.net语法的不行,以至于当我用.net来描述我心中的算法的过程时,遇到了写不出来的情况.
简单的说:就是我心中明明知道可以这样子来实现,但是苦于我语言不通,而无法表述出来.
这好比:我是中国人,但我不会法语. 我希望将我心中的想法通过法语这种语言来描述出来时却遇到了困难.
#8
那就买本C#的书好好做练习了!我也不熟,还不明白你这里的无限级是什么意思?
是不是从数据库里面读取自己填充,还有就是你这个LABEL又怎么做成下拉菜单啊?
是不是从数据库里面读取自己填充,还有就是你这个LABEL又怎么做成下拉菜单啊?
#9
Label不行的话,可以使用Span之类, 反正最终目的就是在前台页面上进行 "文本形式" 的方式呈现无限级下拉菜单的结果. 而非 "dropdownlist" 之类方式的呈现.
#10
去网上载个菜单导航控件
http://cnzc.cnblogs.com/archive/2004/09/29/47797.html
在ASP.NET页面中使用SolpartMenu控http://www.ccw.com.cn/htm/center/prog/02_12_12_2.asp
下载地址:http://www.solpart.com/techcorner/SolpartMenuHistory.aspx
http://cnzc.cnblogs.com/archive/2004/09/29/47797.html
在ASP.NET页面中使用SolpartMenu控http://www.ccw.com.cn/htm/center/prog/02_12_12_2.asp
下载地址:http://www.solpart.com/techcorner/SolpartMenuHistory.aspx
#11
这样说的话可能就要用JavaScript做了!
#12
最好用javaScript 做会好一点
#13
js方案,在讨论有朋友好心与我提过,但我所使用的是.net+C#, 一方面,我的js能力不强.
另一方面,我并不认为使用js来设计会使问题更有效和快速. 第三,整个下拉菜单需要通过数据库的*添加来*展开的.
很感谢 chenzhuo(灼) 以及 menuvb(戏子……www.zfans.net) 的建议,但我仍然希望通过在这里通过大家的帮助寻求更积极的方法.
另一方面,我并不认为使用js来设计会使问题更有效和快速. 第三,整个下拉菜单需要通过数据库的*添加来*展开的.
很感谢 chenzhuo(灼) 以及 menuvb(戏子……www.zfans.net) 的建议,但我仍然希望通过在这里通过大家的帮助寻求更积极的方法.
#14
嘿嘿!。NET+C#还是一样可以使用JS,现在做WEB方面的,谁有用就用谁啊,相结合嘛,而且JS也有人家写好的JS文件可以找找看,我也想不用JS做的,如果你找到这种方法的话记得要告诉我哦!
#15
下面这段代码是我自己所写的关于无限级下单菜单的代码,但由于我的能力的差劲,使得我用这么美妙的语言写下来的却是乱七八糟的代码,并导致了严重的后果:不能运行.
请各位高手帮我分析一下也行的,倍当感激:
先说一下编译所报的错误:
Wap.Admin.Resources.__Left.ShowChildMenuList(int):并非所有的代码路径都返回值. 出错位置在ShowChildMenuList(int)函数所在行上.
前台index.aspx上的是Label控件,并且我将之命名为Label1,所以可以使用Label1.Text.
那么,下面就是代码:
/// <summary>
/// ShowMenuList 显示该资源栏目列表。
/// </summary>
/// <param name="ID">该资源栏目的ID号</param>
///
protected void ShowMenuList(int ID)
{
SqlDataAdapter myAdapter = new SqlDataAdapter("Select Source_ParetID,Source_CName From Resources Where Source_ID = " + ID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"第一级栏目");
for (int i = 0; i < ds.Tables["第一级栏目"].Rows.Count - 1; i++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ID + "&Source_ParetID=" + ds.Tables["第一级栏目"].Rows[i].ItemArray[0] + " target=Source_main>+" + ds.Tables["第一级栏目"].Rows[i].ItemArray[1] + "</a>";
ShowChildMenuList(ID);
}
return;
}
/// <summary>
/// ShowMenuList 显示该资源 子栏目列表。
/// </summary>
/// <param name="ParentID">父ID</param>
private string ShowChildMenuList(int ParentID)
{
string strShowMenuList;
SqlDataAdapter myAdapter= new SqlDataAdapter("Select Source_ID,Source_CName From Resources Where Source_ParetID = " + ParentID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"呈现子栏目");
if (ds.Tables["呈现子栏目"].Rows.Count == 0)
{
//Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
}
else
{
for (int ii=0;ii<=(ds.Tables["Resources"].Rows.Count - 1);ii++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
Label1.Text += ShowChildMenuList(Convert.ToInt32(ds.Tables["Resources"].Rows[ii].ItemArray[0]));
}
}
}
请各位高手帮我分析一下也行的,倍当感激:
先说一下编译所报的错误:
Wap.Admin.Resources.__Left.ShowChildMenuList(int):并非所有的代码路径都返回值. 出错位置在ShowChildMenuList(int)函数所在行上.
前台index.aspx上的是Label控件,并且我将之命名为Label1,所以可以使用Label1.Text.
那么,下面就是代码:
/// <summary>
/// ShowMenuList 显示该资源栏目列表。
/// </summary>
/// <param name="ID">该资源栏目的ID号</param>
///
protected void ShowMenuList(int ID)
{
SqlDataAdapter myAdapter = new SqlDataAdapter("Select Source_ParetID,Source_CName From Resources Where Source_ID = " + ID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"第一级栏目");
for (int i = 0; i < ds.Tables["第一级栏目"].Rows.Count - 1; i++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ID + "&Source_ParetID=" + ds.Tables["第一级栏目"].Rows[i].ItemArray[0] + " target=Source_main>+" + ds.Tables["第一级栏目"].Rows[i].ItemArray[1] + "</a>";
ShowChildMenuList(ID);
}
return;
}
/// <summary>
/// ShowMenuList 显示该资源 子栏目列表。
/// </summary>
/// <param name="ParentID">父ID</param>
private string ShowChildMenuList(int ParentID)
{
string strShowMenuList;
SqlDataAdapter myAdapter= new SqlDataAdapter("Select Source_ID,Source_CName From Resources Where Source_ParetID = " + ParentID + "",SqlConn);
DataSet ds = new DataSet();
myAdapter.Fill(ds,"呈现子栏目");
if (ds.Tables["呈现子栏目"].Rows.Count == 0)
{
//Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
}
else
{
for (int ii=0;ii<=(ds.Tables["Resources"].Rows.Count - 1);ii++)
{
Label1.Text += "<a href=__Main.aspx?Source_ID=" + ParentID + "&Source_ParetID=" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[0] + " target=Source_main>+" + ds.Tables["呈现子栏目"].Rows[ii].ItemArray[1] + "</a>";
Label1.Text += ShowChildMenuList(Convert.ToInt32(ds.Tables["Resources"].Rows[ii].ItemArray[0]));
}
}
}
#16
看不是很明白~~~
#17
oh no,用一个DataList控件来做多好啊!
#18
oh no,用一个DataList控件来做多好啊!
=============================================================
DataList 可以进行无限级显示吗?如果可以,怎么样实现呢?
DataList 所呈现的不是 网格 的数据吗?
=============================================================
DataList 可以进行无限级显示吗?如果可以,怎么样实现呢?
DataList 所呈现的不是 网格 的数据吗?
#19
还是用JS吧,最好的选择.
用服务器的太浪费资源.
要用服务器的我以前写过.那时候对JS不熟.不过..我的只有两层..不是无限级.
用的是ASP...现在说了也白说,代码全没了.
用服务器的太浪费资源.
要用服务器的我以前写过.那时候对JS不熟.不过..我的只有两层..不是无限级.
用的是ASP...现在说了也白说,代码全没了.
#20
To:yilan505(蓝衣紫痕)
我对ASP比较熟练, 如果是ASP来实现的话, 我自信能够很快就其解决完毕.
但是我的主要原因 是因为我对.net的不熟练,导致了我在编写过程中无法将我的想法、或者说是无法将算法付之于在.net上的实现,这是我所苦恼的根结所在.
我对ASP比较熟练, 如果是ASP来实现的话, 我自信能够很快就其解决完毕.
但是我的主要原因 是因为我对.net的不熟练,导致了我在编写过程中无法将我的想法、或者说是无法将算法付之于在.net上的实现,这是我所苦恼的根结所在.
#21
我做的,绝对可以运行,自己参考一下
/*****************************************************************************************
* 显示下拉树型菜单(数据绑定DropDownList)
* ****************************************************************************************/
con.Open();
str_Sql="select * from PE_Class where ChannelID="+arrChannelID+" order by RootID,OrderID ";
SqlCommand cmd = new SqlCommand(str_Sql,con);
dr=cmd.ExecuteReader();
//普通dropdownlist绑定
// ddlParentID.DataTextField="ClassName";
// ddlParentID.DataValueField="ClassID";
// ddlParentID.DataSource=dr;
// ddlParentID.DataBind();
// con.Close();
if(!this.IsPostBack)
{
//初始化arrShowLine 不能放在循环体里面
//arrShowLine 功能:循环体第i次循环判断,如果i=false,显示"│",否则显示" "
bool[] arrShowLine=new bool[21];
for(int i=0;i<arrShowLine.Length;i++)
{
arrShowLine[i]=false;
}
//添加特定Item时这样绑定(这里添加多一个“无(做为一级栏目)”的选择,不在数据库读取的)
//且根据接收的Depth判断他的深度
//ddlParentID.Items.Add(new ListItem("无(做为一级栏目)","0"));
while ( dr.Read() )
{
int tmpDepth=(int)dr["Depth"];
//调用arrShowLine
int tmpNextID=(int)dr["NextID"];
if (tmpNextID>0)
{
arrShowLine[tmpDepth]=true;
}
else
{
arrShowLine[tmpDepth]=false;
}
//子栏目输出方式
if (tmpDepth>0)
{
string strTemp="";
for(int i=1;i<tmpDepth+1;i++)
{
strTemp=strTemp+" ";
if(i==tmpDepth)
{
if((int)dr["NextID"]>0)
{
strTemp=strTemp+"├ ";
}
else
{
strTemp=strTemp+"└ ";
}
}
else
{
if (arrShowLine[i]==true)
//输入if (i==3)表示第三次循环显示"│",可以试一下
{
strTemp=strTemp+"│";
}
else
{
strTemp=strTemp+" ";
}
}
}
strTemp=strTemp+dr["ClassName"].ToString();
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
strTemp=strTemp+"(外)";
}
//
ddlParentID.Items.Add(new ListItem(HttpUtility.HtmlDecode(strTemp),dr["ClassID"].ToString() ));
}
//跟栏目输出方式
else
{
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString()+"(外)",dr["ClassID"].ToString() ));
}
else
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString(),dr["ClassID"].ToString() ));
}
}
}
}
con.Close();
/*****************************************************************************************
* 显示下拉树型菜单(数据绑定DropDownList)
* ****************************************************************************************/
con.Open();
str_Sql="select * from PE_Class where ChannelID="+arrChannelID+" order by RootID,OrderID ";
SqlCommand cmd = new SqlCommand(str_Sql,con);
dr=cmd.ExecuteReader();
//普通dropdownlist绑定
// ddlParentID.DataTextField="ClassName";
// ddlParentID.DataValueField="ClassID";
// ddlParentID.DataSource=dr;
// ddlParentID.DataBind();
// con.Close();
if(!this.IsPostBack)
{
//初始化arrShowLine 不能放在循环体里面
//arrShowLine 功能:循环体第i次循环判断,如果i=false,显示"│",否则显示" "
bool[] arrShowLine=new bool[21];
for(int i=0;i<arrShowLine.Length;i++)
{
arrShowLine[i]=false;
}
//添加特定Item时这样绑定(这里添加多一个“无(做为一级栏目)”的选择,不在数据库读取的)
//且根据接收的Depth判断他的深度
//ddlParentID.Items.Add(new ListItem("无(做为一级栏目)","0"));
while ( dr.Read() )
{
int tmpDepth=(int)dr["Depth"];
//调用arrShowLine
int tmpNextID=(int)dr["NextID"];
if (tmpNextID>0)
{
arrShowLine[tmpDepth]=true;
}
else
{
arrShowLine[tmpDepth]=false;
}
//子栏目输出方式
if (tmpDepth>0)
{
string strTemp="";
for(int i=1;i<tmpDepth+1;i++)
{
strTemp=strTemp+" ";
if(i==tmpDepth)
{
if((int)dr["NextID"]>0)
{
strTemp=strTemp+"├ ";
}
else
{
strTemp=strTemp+"└ ";
}
}
else
{
if (arrShowLine[i]==true)
//输入if (i==3)表示第三次循环显示"│",可以试一下
{
strTemp=strTemp+"│";
}
else
{
strTemp=strTemp+" ";
}
}
}
strTemp=strTemp+dr["ClassName"].ToString();
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
strTemp=strTemp+"(外)";
}
//
ddlParentID.Items.Add(new ListItem(HttpUtility.HtmlDecode(strTemp),dr["ClassID"].ToString() ));
}
//跟栏目输出方式
else
{
//判断是否外部连接
if (dr["LinkUrl"].ToString()!="")
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString()+"(外)",dr["ClassID"].ToString() ));
}
else
{
ddlParentID.Items.Add(new ListItem(dr["ClassName"].ToString(),dr["ClassID"].ToString() ));
}
}
}
}
con.Close();
#22
http://singlepine.cnblogs.com/articles/259955.html
#23
很感谢 lzt7((分头诗人)http://www.lzt7.com) 及 singlepine(小山) 朋友。
感谢所有参与本贴讨论的朋友。
祝福你们天天开心,时时快乐。
那么本贴就结了吧。
感谢所有参与本贴讨论的朋友。
祝福你们天天开心,时时快乐。
那么本贴就结了吧。
#24
fsd
#25
f