日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TreeView数据绑定的方法

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TreeView数据绑定的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?? 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数据绑定的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。