有关WebForm和WinForm的树形菜单
近日在论坛上多次看到有人提出有关树形菜单的问题,今天有点闲置时间,发帖。
为了节省时间,没考虑性能,设计等其他问题,只是做了简单的实现,大家多多指教。好了,下面开始。
数据库SQLServer2005:
.Net版本2.0.这里的数据库操作都借用了PetShop的SqlHelper类,因为是查询就只拿来了一个查询的方法,代码如下:
实体类Menu:
WebForm实现代码如下:
.cs代码:
.aspx代码:
为了节省时间,没考虑性能,设计等其他问题,只是做了简单的实现,大家多多指教。好了,下面开始。
数据库SQLServer2005:
CREATE TABLE [Menu]
(
[id] [int] NOT NULL,
[name] [varchar](50) NOT NULL,
[pid] [int] NOT NULL,
[imageUrl] [nvarchar](50) NULL,
[navigateUrl] [nvarchar](100) NULL
)
GO
.Net版本2.0.这里的数据库操作都借用了PetShop的SqlHelper类,因为是查询就只拿来了一个查询的方法,代码如下:
public class SqlHelper
{
/// <summary>
/// 无参构造方法。
/// </summary>
public SqlHelper() { }
/// <summary>
/// 连接字符串(从配置文件取得)。
/// </summary>
private static readonly string connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
/// <summary>
/// 按照Sql命令返回查询结果的方法
/// </summary>
/// <param name="cmdType">命令类型(存储过程或Sql语句)</param>
/// <param name="cmdText">命令文本(Sql语句)</param>
/// <param name="cmdParams">命令参数(Sql语句用到的参数)</param>
/// <returns>查询到的SqlDataReader对象</returns>
public static SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] cmdParams)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
//如果在这出现异常,那么CommandBehavior.CloseConnection将不能关闭连接
//所以在catch里面关闭连接
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParams);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
System.GC.Collect();
return reader;
}
catch (SqlException ex)
{
conn.Close();
throw new Exception(ex.Message);
}
}
/// <summary>
/// 处理命令的方法
/// </summary>
/// <param name="cmd">SqlCommand对象</param>
/// <param name="connection">SqlConnection对象</param>
/// <param name="trans">SqlTransaction对象</param>
/// <param name="cmdText">Sql语句</param>
/// <param name="cmdParams">语句中出现参数</param>
private static void PrepareCommand(SqlCommand cmd, SqlConnection connection, SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParams)
{
if (connection.State != ConnectionState.Open)
{
connection.Open();
}
cmd.Connection = connection;
cmd.CommandText = cmdText;
if (trans != null)
{
cmd.Transaction = trans;
}
cmd.CommandType = cmdType;
if (cmdParams != null)
{
foreach (SqlParameter param in cmdParams)
{
cmd.Parameters.Add(param);
}
}
}
}
实体类Menu:
/// <summary>
/// Menu 的摘要说明
/// </summary>
public class Menu
{
public Menu()
{
}
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int pid;
public int Pid
{
get { return pid; }
set { pid = value; }
}
private string imageUrl;
public string ImageUrl
{
get { return imageUrl; }
set { imageUrl = value; }
}
private string navigateUrl;
public string NavigateUrl
{
get { return navigateUrl; }
set { navigateUrl = value; }
}
}
WebForm实现代码如下:
.cs代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.AddNode(this.TreeView1.Nodes, 0);
foreach (TreeNode tn in this.TreeView1.Nodes)
{
this.AddNode(tn.ChildNodes, Convert.ToInt32(tn.Value));
}
}
}
/// <summary>
/// 添加节点
/// </summary>
/// <param name="tnCollection">节点集合</param>
/// <param name="pid">菜单父编号</param>
private void AddNode(TreeNodeCollection tnCollection, int pid)
{
using (SqlDataReader reader = SqlHelper.ExecuteReader(CommandType.Text, "SELECT * FROM [Menu] WHERE [pid] = " + pid.ToString(), null))
{
while (reader.Read())
{
Menu menu = new Menu();
menu.Id = reader.GetInt32(0);
menu.Name = reader.GetString(1);
//这里只获取菜单的Name和Value,其他的根据需要可以自己获取。
TreeNode node = new TreeNode();
//这里只设置节点的Name和Value,其他的根据需要可以自己设置。
node.Value = menu.Id.ToString();
node.Text = menu.Name;
tnCollection.Add(node);
}
}
}
.aspx代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:TreeView ID="TreeView1" runat="server">
</asp:TreeView>
</form>
</body>
</html>
...全文
相关推荐
动态生成菜单,可以方便地调整界面(Vs2005)
使用vs2005动态地生成菜单,方面界面调整,所有菜单项可以在数据库中定义
很漂亮的一套树形菜单
教你如何实现网站的左侧树形菜单的制作,付有原代码。
高校技术转移办公室人员如何高效开展技术需求挖掘工作?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
科技中介服务机构如何提升服务的专业性与用户粘性?.docx
科技中介服务机构如何提升服务的专业性与用户粘性?
高校技术转移办公室人员在组织科研成果展示时,如何提升推介材料的专业性与吸引力?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


