关于TreeView控件的绑定,在网上查了很多资料,练习了在两种情况下的绑定,一种是在网页后台直接绑定,一种是在三层架构中绑定。
数据库表的设计
商品小类表(tb_type)
字段名 |
数据类型 |
主键 |
外键 |
非空 |
含义 |
type_id |
int |
是 |
否 |
是 |
小类编号 |
type_name |
nvarchar(50) |
否 |
否 |
否 |
小类名称 |
category_id |
int |
否 |
否 |
是 |
大类编号 |
intro |
text |
否 |
否 |
是 |
介绍 |
商品大类表(tb_ category)
字段名 |
数据类型 |
主键 |
外键 |
非空 |
含义 |
category_id |
int |
是 |
否 |
是 |
大类编号 |
category_name |
varchar(255) |
否 |
否 |
否 |
大类名称 |
intro |
text |
否 |
否 |
是 |
介绍 |
网页后台直接绑定:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dtFather=exe_Table("server=localhost;user id=root;password=root;database=em", "select distinct tb_category.category_id,tb_category.category_name FROM tb_category");
foreach(DataRow dr in dtFather.Rows)
{
TreeNode tn = new TreeNode();
tn.Value = dr["category_id"].ToString();
tn.Text = dr["category_name"].ToString();
TreeView1.Nodes.Add(tn);
DataTable dtChild = exe_Table("server=localhost;user id=root;password=root;database=em",
"select type_id,type_name,category_id from tb_type where tb_type.category_id=" + dr["category_id"].ToString());
foreach (DataRow drChild in dtChild.Rows)
{
TreeNode tnChild = new TreeNode();
tnChild.Value = drChild["type_id"].ToString();//节点的Value值,一般为数据库的id值
tnChild.Text = drChild["type_name"].ToString();//节点的Text,节点的文本显示
tn.ChildNodes.Add(tnChild);
}
}
}
}
/// <summary>
/// 取出数据库中数据,生成DataTable
/// </summary>
/// <param name="str_Con">数据库连接</param>
/// <param name="str_Cmd">sql语句</param>
/// <returns></returns>
private DataTable exe_Table(string str_Con,string str_Cmd)
{
DataSet ds = new DataSet();
using (MySqlConnection conn = new MySqlConnection(str_Con))
{
using (MySqlDataAdapter oda = new MySqlDataAdapter(str_Cmd, conn))
{
conn.Open();
oda.Fill(ds);
}
}
return ds.Tables[0];
}
}
三层架构绑定:
Model实体类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model
{
public class PNode
{
public int id { get; set; }
public string name { get; set; }
public string intro { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model
{
public class Node
{
public int id { get; set; }
public string name { get; set; }
public int pid { get; set; }
public string intro { get; set; }
}
}
DAL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Data;
using Model;
namespace DAL
{
public class ListTreeNode
{
public static List<PNode> GetPNode()
{
string strSql = "select distinct category_id,category_name ,intro from tb_category";
List<PNode> list = new List<PNode>();
using (MySqlConnection cn = new MySqlConnection(StrCon.Conn))
{
cn.Open();
MySqlDataAdapter sda = new MySqlDataAdapter(strSql, cn);
DataSet ds = new DataSet();
sda.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows)
{
PNode pnode = new PNode();
pnode.id = (int)dr["category_id"];
pnode.name = dr["category_name"].ToString();
pnode.intro = dr["intro"].ToString();
list.Add(pnode);
}
return list;
}
}
public static List<Node> GetNode(int pnode_id)
{
string strSql ="select type_id,type_name,tb_type.intro,category_id from tb_type where tb_type.category_id=" + pnode_id;
List<Node> list = new List<Node>();
using (MySqlConnection cn = new MySqlConnection(StrCon.Conn))
{
cn.Open();
MySqlDataAdapter sda = new MySqlDataAdapter(strSql, cn);
DataSet ds = new DataSet();
sda.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows)
{
Node node = new Node();
node.id = (int)dr["type_id"];
node.name = dr["type_name"].ToString();
node.intro = dr["intro"].ToString();
list.Add(node);
}
return list;
}
}
}
}
BLL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web;
using System.Web.UI.WebControls;
using DAL;
using Model;
namespace BLL
{
public class VarityManage
{
//获得根结点信息
public static List<PNode> GetPNode()
{
return DAL.ListTreeNode.GetPNode();
}
//获得叶结点信息
public static List<Node> GetNode(int pnode_id)
{
return DAL.ListTreeNode.GetNode(pnode_id);
}
}
}
UI:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using Model;
namespace E_mall_background_system.Management
{
public partial class main : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindTreeView();
BindddlSelectPNode1();
}
}
//TreeView的绑定
public void BindTreeView()
{
TreeView1.Nodes.Clear();
int rootId = 0;
string rootName = "所有商品种类";
TreeNode root = CreateTreeNode(rootId, rootName);
TreeView1.Nodes.Add(root);
List<PNode> pnodes = VarityManage.GetPNode();
foreach (PNode pnode in pnodes)
{
int nodeId = (int)pnode.id;
string nodeName = pnode.name.ToString();
TreeNode treeNode = this.CreateTreeNode(nodeId, nodeName);
root.ChildNodes.Add(treeNode);
List<Node> nodes = VarityManage.GetNode(nodeId);
foreach (Node node in nodes)
{
int childNodeId =(int) node.id;
string childNodeName = node.name.ToString();
TreeNode childTreeNode = this.CreateTreeNode(childNodeId, childNodeName);
treeNode.ChildNodes.Add(childTreeNode);
}
}
}
public TreeNode CreateTreeNode(int id, string name)
{
TreeNode tn = new TreeNode();
tn.Value = id.ToString();
tn.Text = name;
return tn;
}
}
}