请问在aspx页面上写如下效果,如何实现,本人是原先是在aspx上写c#代码来实现的,如果不把c#代码写在aspx上,可否实现这样的效果,如果可以的话,该如何实现,请各位指点迷津.aaa [添加二级栏目]
|-aa11 [添加三级栏目]
|-aa22 [添加三级栏目]
|-aa33 [添加三级栏目]
|-a-3-1
|-a-3-2PS:以上显示的数据都保存于同一个数据库中.
|-aa11 [添加三级栏目]
|-aa22 [添加三级栏目]
|-aa33 [添加三级栏目]
|-a-3-1
|-a-3-2PS:以上显示的数据都保存于同一个数据库中.
menu.aspx 页面的html代码
<asp:TreeView ID="treelist" runat="server" ExpandDepth="0" Font-Size="12px" Width="100%">
<LeafNodeStyle HorizontalPadding="3px" NodeSpacing="3px" />
<NodeStyle NodeSpacing="3px" />
</asp:TreeView>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
using (SqlConnection sqlcon = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))//数据库连接
{
sqlcon.Open();
SqlCommand sqlcom = new SqlCommand("select * from bbs_master_table", sqlcon);
SqlDataReader reader = sqlcom.ExecuteReader();
while (reader.Read())
{
TreeNode node = new TreeNode(reader["name"].ToString().Trim(), reader["id"].ToString().Trim(), "image/folder.gif", "bbs_list_style.aspx?id=" + reader["id"].ToString().Trim() + "&name="+HttpUtility.UrlEncode(reader["name"].ToString().Trim())+"","right");
using (SqlConnection sqlconChild=new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
{
sqlconChild.Open();
SqlCommand sqlcomchild = new SqlCommand("select * from bbs_child_table where priid=" + reader["id"].ToString().Trim() + "", sqlconChild);
SqlDataReader readerchild = sqlcomchild.ExecuteReader();
while (readerchild.Read())
{
TreeNode nodeChild = new TreeNode(readerchild["cname"].ToString().Trim(), readerchild["id"].ToString().Trim(), "image/child.gif", "bbs_list_content.aspx?id=" + readerchild["id"].ToString().Trim() + "&name=" + HttpUtility.UrlEncode(readerchild["cname"].ToString().Trim()) + "", "right");
node.ChildNodes.Add(nodeChild);
}
readerchild.Close();
}
treelist.Nodes.Add(node);
}
}
}
}
后台代码说明:
bbs_master_table表字段有:
id 编号(int型,自加1)
name 名称//相当于CSDN上面的.net技术、java技术节点一样。
bbs_list_style.aspx页面是点击节点时链接的页面。
bbs_child_table子表字段有:
id 编号 主键
priid为外键号--主键为bbs_master_table 的id
cname子节点
这样就可以实现二级了。其它的楼主可以自己搞定啦....其实只要数据相对应,是很容易实现的。
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<!-- 父Repeater开始 -->
<asp:Repeater id="Repeater1" runat="server">
<itemtemplate>
<b>
<br>
CustomerID:
<%#Eval("CustomerID") %>
</b>
<!-- 子Repeater开始 -->
<asp:repeater id="childRepeater" runat="server"
datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("CustOrder") %>'>
<itemtemplate>
<%#Eval("[\"ORDERID\"]")%>
<%--如果不是这样写的话,可能会出现DataBinding:“System.Data.DataRow”不包含名为“ORDERID”的属性--%>
<br>
</itemtemplate>
</asp:repeater>
<hr>
<!-- 子Repeater结束 -->
</itemtemplate>
</asp:Repeater>
<!-- 父Repeater结束 -->
</FONT>
</form>
</body>
</HTML>
cs页面代码: Code
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;namespace HibernateTest
{
/**//// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater Repeater1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
this.GetData();
}
} Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
private void GetData()
{
SqlConnection con = new SqlConnection("server=(local);database=Northwind;uid=sa;pwd=;");
System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers",con);
System.Data.SqlClient.SqlDataAdapter da1 =new SqlDataAdapter("SELECT * FROM ORDERS",con);
DataSet ds= new DataSet();
try
{
con.Open();
//将主表Customer添加到DataSet中
da.Fill(ds,"Customers");
//将子表Orders添加到DataSet中
da1.Fill(ds,"Orders");
//添加表Customer和表Orders之间的关系CustOrder;关联字段CustomerID
ds.Relations.Add("CustOrder",ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]); this.Repeater1.DataSource = ds;
this.Repeater1.DataBind();
}
catch(Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
}
}
}
用DropDownList 实现无限级分类,主要使用递归实现数据库结构:最终样式:
protected void Page_Load(object sender, EventArgs e)
2 {
3 if (!Page.IsPostBack)
4 {
5 BindDrpClass();
6 }
7 }
8 //绑定顶级分类
9 private void BindDrpClass()
10 {
11 Bll.Class classSystem = new Bll.Class();
12 DataTable dt = classSystem.GetClassList("").Tables[0];
13 ddlClass.Items.Clear();
14 ddlClass.Items.Add(new ListItem("添加根栏目","0"));
15 DataRow[] drs = dt.Select("ParentID= " + 0);
16
17 foreach (DataRow dr in drs)
18 {
19 string classid = dr["ClassID"].ToString();
20 string classname = dr["ClassName"].ToString();
21 //顶级分类显示形式
22 classname = "╋" + classname;
23
24 ddlClass.Items.Add(new ListItem(classname, classid));
25 int sonparentid = int.Parse(classid);
26 string blank = "├";
27 //递归子分类方法
28 BindNode(sonparentid, dt, blank);
29 }
30 ddlClass.DataBind();
31 }
32 //绑定子分类
33 private void BindNode(int parentid, DataTable dt, string blank)
34 {
35 DataRow[] drs = dt.Select("ParentID= " + parentid);
36
37 foreach (DataRow dr in drs)
38 {
39 string classid = dr["ClassID"].ToString();
40 string classname = dr["ClassName"].ToString();
41
42 classname = blank + classname;
43 ddlClass.Items.Add(new ListItem(classname, classid));
44
45 int sonparentid = int.Parse(classid);
46 string blank2 = blank + "─";
47
48 BindNode(sonparentid, dt, blank2);
49 }
50 }
数据访问(Bll里面的classSystem方法 )
public DataSet GetClassList(string strWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from tb_Class ");
if (strWhere.Trim() != "")
{
strSql.Append(" where " + strWhere);
}
return SqlHelper.ExecuteDataset(SqlHelper.ConnString, CommandType.Text, strSql.ToString());
}
参考