ASP.NET DEMO 18: 如何编程动态创建 Menu
ASP.NET DEMO 15: 如何编程动态创建 TreeView 的姊妹篇:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
CreateMenu();
}
}
/// <summary>
/// 创建 Menu
/// 此方法采取一次性加载目标数据到 DataTable,递归查询 DataTable ,创建子节点
/// </summary>
private void CreateMenu()
{
//
const int VirtualRootId = 0; // 虚拟的根节点 ID, 表中 ParentID=0 的节点表示无实际父节点
const string SQL_SELECT = "SELECT NodeId, NodeName,ParentId FROM TreeView ORDER BY NodeId ASC";
//
string connStr = "Provider=Microsoft.Jet.OleDb.4.0;data source=" + Server.MapPath("Menu_CreateMenuDynamicFromDb.mdb"); ;
//
OleDbDataAdapter da = new OleDbDataAdapter(SQL_SELECT, connStr);
DataTable dt = new DataTable();
//
da.Fill(dt);
//
CreateMenuRecursive(mnuDemo.Items, dt, VirtualRootId);
}
/// <summary>
/// 递归查询数据,创建 MenuItem 节点
/// </summary>
/// <param name="items"></param>
/// <param name="dataSource"></param>
/// <param name="parentId"></param>
private void CreateMenuRecursive(MenuItemCollection items, DataTable dataSource, int parentId)
{
//
string fliter = String.Format("ParentId={0}", parentId);
// 查询子节点
DataRow[] drArr = dataSource.Select(fliter);
MenuItem item;
foreach(DataRow dr in drArr) {
//
item = new MenuItem();
items.Add(item);
item.Text = (string)dr["NodeName"];
// 设置其他属性
//
// 递归创建子节点
CreateMenuRecursive(item.ChildItems, dataSource, (int)dr["NodeId"]);
// 移除已添加行,提高性能
dataSource.Rows.Remove(dr);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>CreateMenuResursiveFromDb</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>动态创建Menu</h1>
<asp:Menu ID="mnuDemo" runat="server" ExpandDepth="1" BackColor="#FFFBD6"
DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em"
ForeColor="#990000" StaticSubMenuIndent="10px">
<StaticSelectedStyle BackColor="#FFCC66" />
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<DynamicHoverStyle BackColor="#990000" ForeColor="White" />
<DynamicMenuStyle BackColor="#FFFBD6" />
<DynamicSelectedStyle BackColor="#FFCC66" />
<DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<StaticHoverStyle BackColor="#990000" ForeColor="White" />
</asp:Menu>
</div>
</form>
</body>
</html>
示例下载
ASP.NET DEMO 18: 如何编程动态创建 Menu相关推荐
- ASP.NET AJAX Advance Tips Tricks (11) 三种方法动态创建Tooltip
前言 如何动态创建提示框(Tooltip)是ASP.NET Forum里的常见问题之一,在做技术支持时,我曾在英文博客上总结过ASP.NET和ASP.NET AJAX环境下如何动态创建提示框的三种常见 ...
- 动态生成word文档原来如此简单!Aspose.Words助力以Java编程方式创建丰富的Word文档
近年来,Word文档的动态生成已成为组成报告,报价,发票和其他类型文档的流行功能.各种制造公司都基于数据库中存储的数据生成发票.在这种情况下,文档自动化可以节省手动文档创建过程中所需的时间,精力和资源 ...
- asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性
asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性 就是不用 XXX.Visible = false; // true 因为这样该容器及其子控件会彻底的从页面上消 ...
- 动态创建asp.net控件之我见
最近考虑将之前用delphi设计的开发框架思路在asp.net上实现,其中有一项功能时动态生成录入界面,这在form开发程序中比较简单只要设置好动态生成的控件的所有者(owner),及位置还有相关事件 ...
- asp.net 动态创建TextBox控件 如何加载状态信息
接着上文Asp.net TextBox的TextChanged事件你真的清楚吗? 这里我们来说说状态数据时如何加载的. 虽然在Control中有调用状态转存的方法,但是这里有一个判断条件 if (_c ...
- 风变编程第18关 编程思维_动态编程变得容易
风变编程第18关 编程思维 Imagine you have a bag of coins where each coin is of value 5 dollars and you have to ...
- ASP.NET动态创建控件之绝境求生
来源:中国IT实验室 在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Ide ...
- ASP.NET动态创建控件之绝境求生第一页
ASP.NET动态创建控件之绝境求生 日期:2007年9月8日 作者: 查看:[ 大字体 中字体 小字体] <script src="../gg/info468.js" ty ...
- ASP.NET动态创建控件之绝境求生第二页
ASP.NET动态创建控件之绝境求生 日期:2007年9月8日 作者: 查看:[大字体 中字体 小字体] <script src="../gg/info468.js" typ ...
最新文章
- Linux指令--文件和目录属性
- Scratch青少年编程能力等级测试模拟题(三级)
- 编程之美-数字哑谜和回文方法整理
- 43 FI配置-财务会计-固定资产-一般评估-定义折旧范围
- Python小数据保存,有多少中分类?不妨看看他们的类比与推荐方案...
- CVPR 2022 | 即插即用!南洋理工商汤开源SAM-DETR: 利用语义对齐匹配实现快速收敛的DETR...
- 如何在微信中直接下载APK
- vs2013 打开失败 未能完成操作,不支持此接口
- IC设计之CDC(跨时钟域)问题
- Javascript中的作用域,作用域链
- 阿里巴巴年度技术总结 - 人工智能在搜索的应用和实践
- 三态门及其在I2C总线中的应用_普中_89C52单片机
- css 侧栏跟随_如何实现博客的侧栏跟随(滚动条)效果
- 编码的奥秘:从算盘到芯片
- DNP3 模拟器使用教程
- 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板
- acm暑期集训_2020.07.02
- React——相关js库以及使用React开发者工具调试
- python中对列表的探讨(二)
- 人脸识别会被留底吗_人脸识别时代,我们的隐私会被刷走吗