动态从数据库读取菜单(ASP.NET版)
这几天一直打算做个从数据读取导航菜单的效果,以前做的时候都是写死的(太死了),好了话不多说,先看效果!

我是个小菜,高手请不要喷!我在网上查了好久,说用menu控件,但是我用了不太好!最后我决定用repeater的嵌套来实现这个效果。先数据库结构吧!

前台的代码:
<body>
<form id="form1" runat="server">
<div class="menu">
<ul class="nav">
<asp:Repeater ID="rptNav" runat="server" OnItemDataBound="rptNav_ItemDataBound">
<ItemTemplate>
<li><a href='<%# DataBinder.Eval(Container.DataItem,"navUrl")%>'>
<%# DataBinder.Eval(Container.DataItem,"navTitle") %></a>
<asp:Repeater ID="rptSub" runat="server">
<HeaderTemplate>
<ul class="sub-nav">
</HeaderTemplate>
<ItemTemplate>
<li><a href='<%# DataBinder.Eval(Container.DataItem,"navUrl")%>'>
<%# DataBinder.Eval(Container.DataItem,"navTitle") %></a></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</div>
</form>
</body>
</html>
后台的实现:
using System;
using System.Collections.Generic; using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data; namespace LearnTest
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
InitData();
}
} /// <summary>
/// 初始化数据
/// </summary>
private void InitData()
{
SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=xjai18749695757;database=Test");
SqlDataAdapter da = new SqlDataAdapter("select * from nav where parentId = 0",cn);
DataSet ds = new DataSet();
cn.Open(); //打开数据库连接
da.Fill(ds);
rptNav.DataSource = ds.Tables[].DefaultView;
rptNav.DataBind();
cn.Close();
} //绑定一级菜单时绑定二级菜单
protected void rptNav_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//判断repeater的数据绑定列
if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)
{
//当前一级菜单的ID
string id = ((DataRowView)(e.Item.DataItem)).Row["Id"].ToString();
//找到下面的repeater控件
Repeater rpt = (Repeater)e.Item.FindControl("rptSub");
if (rpt!=null)
{
SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=123456;database=Test");
SqlCommand cmd = new SqlCommand("select * from nav where parentId =@parentId",cn);
cmd.Parameters.Add("@parentId",SqlDbType.VarChar,).Value = id;
cn.Open();
rpt.DataSource = cmd.ExecuteReader();
rpt.DataBind();
cn.Close(); } }
}
}
}
这就是用repeater进行嵌套来进行实现的!
动态从数据库读取菜单(ASP.NET版)的更多相关文章
- java从数据库读取菜单,递归生成菜单树
首先看一下菜单的样子 根据这个样子我们定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...
- ASP.NET状缓存Cache的应用-提高数据库读取速度
原文:ASP.NET状缓存Cache的应用-提高数据库读取速度 一. Cache概述 既然缓存中的数据其实是来自数据库的,那么缓存中的数据如何和数据库进行同步呢?一般来说,缓存中应该存放改 ...
- 【vue】iView-admin2.0动态菜单路由【版2】
依照iView-admin2.0动态菜单路由[版1] 归纳几个节点动态路由获取方式2 ——> easymock假数据 ——> 数据转组件处理.addRoutes ——> localS ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- ASP.NET版Memcached监控工具(转载)
在上一篇文章<使用Memcached提高.NET应用程序的性能>中周公讲述如何在.NET中使用Memcached来提高.NET应用程序的性 能.在实际的使用中有可能出现Memcached因 ...
- C语言与数据库操作入门(Win版)
C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...
- 10天学会phpWeChat——第三天:从数据库读取数据到视图
在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...
随机推荐
- ngrok内网穿透(微信调试:只试用于微信测试账号)
一.简介 ngrok:https://ngrok.com 功能:就是把外网地址映射到本地的内网地址 缺点: 1.免费版生成的域名是随机的(由于我是用于调试,就没什么关系,如果是正式生产环境可能需要一个 ...
- oracle单行函数之字符函数
Lower--转换为小写 upper--转换为大写 Initcap--首字母大写 concat--连接字符 substr--截取字符 length/length--获取字符串长度(字节长度) inst ...
- 学习OpenSeadragon之五(工具条toolbar与自定义按钮)
OpenSeadragon简介:学习OpenSeadragon之一(一个显示多层图片的开源JS库) 一.工具条toolbar设置 OpenSeadragon为我们提供了现成的工具条toolBar,工具 ...
- 阿里云CENTOS服务器挂载数据盘
阿里云Linux云服务器数据盘默认是未做分区和格式化的,使用前需要先挂载数据盘.步骤如下: 1.查看数据盘 在没有分区之前,使用 1 df -h 2.命令,是无法查看到数据盘的,可以使用 1 ...
- php与http协议
1.预定义变量$_SERVER $_SERVER 是一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组. 可以再后台输出 f ...
- 深入浅出Java 重定向和请求转发的区别
深入浅出Java 重定向和请求转发的区别 <span style="font-family:FangSong_GB2312;font-size:18px;">impor ...
- python 多层装饰器
25.多层装饰器: 1.原理:执行顺序从上往下,#2和#3组成一个函数假设为nf1,#1和nf1组成一个函数nnf1 f1成为ck_ty_of_us的inner函数即nf ...
- js的兼容性问题
innerHTML和innerTEXT的使用问题 <html xmlns="http://www.w3.org/1999/xhtml"> <head> &l ...
- csv内存流文件流
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- nodejs 在headers添加内容发送到后端
app.all('*', function(req, res, next){ req.headers['COOKIE'] = 'Your Cookie' next() })