TreeView数据绑定的方法
2011-12-03 21:22
471 查看
• TreeView数据绑定的方法
• 最近作一个.net程序中涉及到权限的分配和管理,要把分为不同层次的权限从数据库中读出在树形控件TreeView中显示出来。这里采取的是首先取出数据放在DataTable中,然后在递归查询中根据不同的filter条件得到对应树杈需要的数据。这里使用类似的行政区划的数据表,数据表为:
CREATE TABLE [dbo].[QuHua] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,--自增的标记列
[NAME] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,--行政区划的名称
[ParentID] [int] NOT NULL --行政区划的上一级区划ID,最高级区划的上一级默认为0
) ON [PRIMARY]
GO
---插入测试数据
Insert Into dbo.QuHua (NAME,ParentID) Values ('北京',0)
Insert Into dbo.QuHua (NAME,ParentID) Values ('山东',0)
Insert Into dbo.QuHua (NAME,ParentID) Values ('河北',0)
Insert Into dbo.QuHua (NAME,ParentID) Values ('海淀',1)
Insert Into dbo.QuHua (NAME,ParentID) Values ('中关村',4)
Insert Into dbo.QuHua (NAME,ParentID) Values ('济宁',2)
Insert Into dbo.QuHua (NAME,ParentID) Values ('曲阜',6)
Insert Into dbo.QuHua (NAME,ParentID) Values ('济南',2)
/// <summary>
/// 根据递归查询结果动态生成TreeView
/// 由于算法效率问题,不适合数据量的情况
/// </summary>
private void CreateTreeView()
{
string connetion = "Data Source=. ;Initial Catalog=MIS_New;Integrated Security=True";
using (SqlConnection cn = new SqlConnection(connetion))
{
cn.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from QuHua", cn);
DataTable dt = new DataTable();
da.Fill(dt);
//首先把第一级的行政区划取出生成TreeView的节点
//作为递归运算的入口
CreateTreeViewRecursive(treeView1.Nodes, dt, 0);
}
}
/// <summary>
/// 递归查询
/// </summary>
/// <param name="nodes">TreeView的节点集合</param>
/// <param name="dataSource">数据源</param>
/// <param name="parentid">上一级行政区划的标识码</param>
private void CreateTreeViewRecursive(TreeNodeCollection nodes,DataTable dataSource,int parentid)
{
string filter;
filter = string.Format("parentid={0}", parentid);
DataRow[] drarr = dataSource.Select(filter);
TreeNode node;
foreach (DataRow dr in drarr)
{
node = new TreeNode();
node.Text = (string)dr["name"];
node.Tag = (int)dr["id"];
nodes.Add(node);
CreateTreeViewRecursive(node.Nodes,dataSource,(int)node.Tag);
}
}
/// <summary>
/// 生成树
/// </summary>
/// <param name="id">父ID。加载根结点时为0</param>
/// <param name="tn">父结点。加载根结点时为null</param>
private void setTreeNode(int id, TreeNode tn)
{
//DataView dvTree = new DataView(dt); //dt为<所有数据的datatable。每次都在这个datatable上筛选数据
//dvTree.RowFilter = "ParentID=" + id.ToString();
//for (int i = 0; i < dvTree.Count; i++)
//{
// TreeNode newNode = new TreeNode();
// newNode.Text = dvTree[i]["LocationName"].ToString().Trim();
// LocationData locaType = new LocationData();
// locaType.ID = (int)dvTree[i]["ID"]; //ID
// locaType.LocationID = (int)dvTree[i]["LocationID"]; //位置ID
// locaType.ParentID = (int)dvTree[i]["ParentID"]; //父ID
// locaType.LocationTypeID = (int)dvTree[i]["LocationTypeID"]; //位置类型ID
// locaType.LocationName = dvTree[i]["LocationName"].ToString(); //位置名称
// locaType.LocationDesc = dvTree[i]["LocationDesc"].ToString(); //位置描述
// newNode.Tag = locaType;
// if (tn == null)
// {
// this.TreeView1.Nodes.Add(newNode);
// setTreeNode(Int32.Parse(dvTree[i]["LocationID"].ToString().Trim()), newNode);
// }
// else
// {
// tn.Nodes.Add(newNode);
// setTreeNode(Int32.Parse(dvTree[i]["LocationID"].ToString().Trim()), newNode);
// }
//}
}
public void AddTree(int ParentID, TreeNode pNode, TreeView tv)
{
DataTable dt = (DataTable)this.ViewState["treeTable"];
//从ViewState["treeTable"]取上面的那个表,不从数据库中取。以免过多循环读取数据库。
DataView dvTree = new DataView(dt);
dvTree.RowFilter = "[ParentID] = " + ParentID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["AgentName"].ToString();
Node.Value = Row["AgentTree"].ToString();
tv.Nodes.Add(Node);
Node.NavigateUrl = "AgentOrg.aspx";
Node.Target = "MainFrame";
AddTree(Int32.Parse(Row["id"].ToString()), Node, TreeView1);
}
else
{ //̀添加当前节点的子节点
Node.Text = Row["AgentName"].ToString();
Node.Value = Row["id"].ToString();
pNode.ChildNodes.Add(Node);
Node.NavigateUrl = "AgentOrg.aspx";
Node.Target = "MainFrame";
AddTree(Int32.Parse(Row["id"].ToString()), Node, TreeView1); //再次递归
}
}
}
相关文章推荐
- TreeView递归绑定数据的两种方法
- ASP.NET2.0中 TreeView 和ORACLE 数据绑定的一种方法
- 两种方法创建WPF目录树TreeView和GridView数据绑定
- 小D的TreeView数据绑定方法
- C# .NET treeView(树形控件)绑定数据的通用方法 (精)
- 【原创】SQL数据库数据绑定到TreeView菜单目录的类方法实现
- TreeView数据绑定的方法(可实现无限递归)
- TreeView数据绑定的方法
- VB.NET中treeview使用方法二与access数据库的数据绑定
- TreeView数据绑定方法
- TreeView数据绑定方法
- TreeView数据绑定方法
- 使用asp.net递归的方法来实现treeview的数据绑定
- 向TreeView 控件添加数据绑定功能(从微软处转载)
- treeview绑定硬盘数据文件
- C# TextBox数据绑定的方法
- 求:三个类别表绑定TREEVIEW 方法..
- 前台用Gridview绑定数据时时间只显示 年月日 的方法
- ListView绑定数据的两种方法
- Asp.Net--DropDownList与DataTable数据绑定的方法(C#)[学习笔记]