DataList 嵌套 Repeater 实现 二级菜单
实现本文所讲的效果首先要对:Jquery Css 略懂。
因为本人在这方面,也是个小白!只实现了一部分效果,还请大家补充!
内容分析:
首先在页面上放置一个datalist, 然后在datalist里面放置一个Repeater。
在datalist的ItemDataBound事件中给Repeater绑定值。再用Jqury控制导航
的显示与隐藏。
代码在附件效果如图:
主导航:
二级导航,CSS未控制好:
使用注意事项:
引入:Jquery 1.3.2.min.js
所使用的数据库为Access,结构,数据如图:
逻辑处理的方法代码
using System; using System.Collections.Generic; using System.Web; using System.Data.OleDb;//引入oledb using System.Data; using System.Collections; using System.IO; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; /// <summary> /// 描述:数据访问类,业务处理类 /// 功能:提供数据访问,业务处理的方法 /// 作者:R3 /// 时间:2011-01-04 16:13:59 /// </summary> public class Bll_Manager { HttpResponse Response = null; public Bll_Manager(HttpResponse response) { Response = response; // // TODO: Add constructor logic here // } //数据库连接 private static OleDbConnection con; public static OleDbConnection Con { get { if (con == null) { con = new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db1.mdb;" + "Persist Security Info=True"); } else if (con.State == ConnectionState.Broken) { con.Close(); con.Open(); } else if (con.State == ConnectionState.Closed) { con.Open(); } return con; } } #region GetBySQL 查询-返回datatable public static DataTable GetBySQL(string sql) { OleDbCommand cmd = new OleDbCommand(sql, Con);//执行命令 OleDbDataAdapter da = new OleDbDataAdapter(cmd);//装载结果 DataTable dt = new DataTable();//创建datata da.Fill(dt);//填充datatable return dt;//返回结果 } #endregion #region ExcuteCmd 执行修改,删除,添加 public static int ExcuteCmd(string sql) { OleDbCommand cmd = new OleDbCommand(sql, Con);//执行命令 int rs = cmd.ExecuteNonQuery();//返回执行结果 return rs; } #endregion #region IsNumber 判断是否是数字 public static bool IsNuber(string number) { bool isCheck = true; if (string.IsNullOrEmpty(number)) { isCheck = false; } else { char[] charNumber = number.ToCharArray(); for (int i = 0; i < charNumber.Length; i++) { if (!char.IsNumber(charNumber[i])) { isCheck = false; break; } } } return isCheck; } #endregion #region GetIp 获得IP地址 public static string GetIp() { if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null) { return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]. Split(new char[] { ',' })[0]; } else { return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } } #endregion }
:
后台代码:
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { BindRptOne(); } } ///绑定第一个Repeater public void BindRptOne() { //查询主导航 string strBigType = "select * from N_bigtype order by b_id"; //绑定一级Repeater rpt1.DataSource = Bll_Manager.GetBySQL(strBigType); rpt1.DataBind(); } ///绑定第二个Repeater protected void rpt1_ItemDataBound(object sender, DataListItemEventArgs e) { //判断是否是listItem项 if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem) { //查找第二个Repeater Repeater rpt2 = e.Item.FindControl("Rpt2") as Repeater; //循环获取Datalist的DataKeys int b_id = 0; for (int i = 0; i < rpt1.Items.Count;i++ ) { b_id = Convert.ToInt32(rpt1.DataKeys[i + 1].ToString()); } //sql string strSmallType = "select * from N_smallType where b_id =" + b_id + " order by s_name"; //source rpt2.DataSource = Bll_Manager.GetBySQL(strSmallType); //bind rpt2.DataBind(); } } }
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Title="for_Repeater" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <!--导航样式控制--> <style type="text/css"> ul{list-style:left;} li {list-style:none; display:inline; text-align:center;} dt{ display:block; float:left; padding:20px; background-color:InactiveCaption; } #menu dt a{ text-decoration:none;} #menu dt a:hover,#menu dt a:active{Color:Red; background-color:White; float:left} #menu dt a:visited,#menu dt a:link{Color:black; float:left;} #menu dd{ float:left; padding-top:80px; cursor:pointer; width:80px;} </style> <!--用Jquery控制导航--> <script src="Scripts/jquery-1.3.2.min.js" type="text/javascript" language="javascript"></script> <script src="Scripts/index.js" language="javascript" type="text/javascript"></script> <script language="javascript" type="text/javascript" > /** 用Jqueru控制Dd Dt的显示。 */ $(document).ready(function () { $('#menu ul li').each(function () { $(this).children("dd").css("display", "none"); $(this).children("dt").mouseover(function () { $(this).next().css("display", "block"); }).mouseout(function () { $(this).next().css("display", "none"); }); $(this).children("dd").mouseover(function () { $(this).css("display", "block"); }).mouseout(function () { $(this).css("display", "none"); }); }); }); </script> </head> <body> <form id="form1" runat="server"> <div id="menu" style="width:1024px;"> <ul> <!--第一个Repeater--> <asp:DataList ID="rpt1" DataKeyField="b_id" runat="Server" onitemdatabound="rpt1_ItemDataBound" RepeatDirection="Horizontal"> <ItemTemplate> <li style="width:1024px; "> <!--一级导航---> <dt> <a href="#"><%#Eval("b_name") %></a> </dt> <dd> <!--第二个Repeater--> <asp:Repeater ID="rpt2" runat="Server"> <ItemTemplate> <!--二级导航---> <a href="#"><%#Eval("s_name") %></a> </ItemTemplate> </asp:Repeater> </dd> </li> </ItemTemplate> </asp:DataList> </ul> </div> </form> </body> </html>