在 TreeView 控件中显示分层数据
生活随笔
收集整理的這篇文章主要介紹了
在 TreeView 控件中显示分层数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、在web.config文件中創建以下數據庫連接字符串
<connectionStrings>
????????<add?name="NorthwindConnectionString"?connectionString="Data?Source=localhost;Initial?Catalog=Northwind;Integrated?Security=True"
????????????providerName="System.Data.SqlClient"?/>
????</connectionStrings> 2、在Treeview頁面中添加以下代碼
protected?void?TreeView1_TreeNodePopulate(object?sender,?TreeNodeEventArgs?e)
????{
????????if?(e.Node.ChildNodes.Count?==?0)
????????{
????????????switch?(e.Node.Depth)
????????????{
????????????????case?0:
????????????????????PopulateCategories(e.Node);
????????????????????break;
????????????????case?1:
????????????????????PopulateProducts(e.Node);
????????????????????break;
????????????}
????????}
????}
????{
????????SqlCommand?sqlQuery?=?new?SqlCommand(
????????????"Select?CategoryName,?CategoryID?From?Categories");
????????DataSet?resultSet;
????????resultSet?=?RunQuery(sqlQuery);
????????if?(resultSet.Tables.Count?>?0)
????????{
????????????foreach?(DataRow?row?in?resultSet.Tables[0].Rows)
????????????{
????????????????TreeNode?NewNode?=?new
????????????????????TreeNode(row["CategoryName"].ToString(),
????????????????????row["CategoryID"].ToString());
????????????????NewNode.PopulateOnDemand?=?true;
????????????????NewNode.SelectAction?=?TreeNodeSelectAction.Expand;
????????????????node.ChildNodes.Add(NewNode);
????????????}
????????}
????}
????{
????????SqlCommand?sqlQuery?=?new?SqlCommand();
????????sqlQuery.CommandText?=?"Select?ProductName?From?Products?"?+
????????????"?Where?CategoryID?=?@categoryid";
????????sqlQuery.Parameters.Add("@categoryid",?SqlDbType.Int).Value?=
????????????node.Value;
????????DataSet?ResultSet?=?RunQuery(sqlQuery);
????????if?(ResultSet.Tables.Count?>?0)
????????{
????????????foreach?(DataRow?row?in?ResultSet.Tables[0].Rows)
????????????{
????????????????TreeNode?NewNode?=?new
????????????????????TreeNode(row["ProductName"].ToString());
????????????????NewNode.PopulateOnDemand?=?false;
????????????????NewNode.SelectAction?=?TreeNodeSelectAction.None;
????????????????node.ChildNodes.Add(NewNode);
????????????}
????????}
????} 此代碼與用以填充類別節點的代碼類似。不同之一是 SqlCommand 對象配置有一個參數,在運行時,以用戶單擊的節點(即選擇的類別)的值來設置該參數。另一不同之處是 PopulateOnDemand 屬性設置為 false。這導致產品節點顯示后不帶有展開按鈕,這是必須的,因為產品下再沒有節點。
private?DataSet?RunQuery(SqlCommand?sqlQuery)
????{
????????string?connectionString?=
????????????ConfigurationManager.ConnectionStrings
????????????["NorthwindConnectionString"].ConnectionString;
????????SqlConnection?DBConnection?=
????????????new?SqlConnection(connectionString);
????????SqlDataAdapter?dbAdapter?=?new?SqlDataAdapter();
????????dbAdapter.SelectCommand?=?sqlQuery;
????????sqlQuery.Connection?=?DBConnection;
????????DataSet?resultsDataSet?=?new?DataSet();
????????try
????????{
????????????dbAdapter.Fill(resultsDataSet);
????????}
????????catch
????????{
????????????labelStatus.Text?=?"Unable?to?connect?to?SQL?Server.";
????????}
????????return?resultsDataSet;
????}
<connectionStrings>
????????<add?name="NorthwindConnectionString"?connectionString="Data?Source=localhost;Initial?Catalog=Northwind;Integrated?Security=True"
????????????providerName="System.Data.SqlClient"?/>
????</connectionStrings> 2、在Treeview頁面中添加以下代碼
protected?void?TreeView1_TreeNodePopulate(object?sender,?TreeNodeEventArgs?e)
????{
????????if?(e.Node.ChildNodes.Count?==?0)
????????{
????????????switch?(e.Node.Depth)
????????????{
????????????????case?0:
????????????????????PopulateCategories(e.Node);
????????????????????break;
????????????????case?1:
????????????????????PopulateProducts(e.Node);
????????????????????break;
????????????}
????????}
????}
當用戶單擊一個節點以打開該節點時,會調用此代碼。因為需要在樹的不同級別顯示不同的數據,所以必須確定用戶單擊的節點深度,然后適當地填充該級別的節點。在此演練中,如果用戶單擊根節點(深度為 0),則調用 PopulateCategories 方法。如果用戶單擊類別名稱(深度為 1),則調用 PopulateProducts 方法。這些方法在下一節中演示。
對象提供對當前節點的編程訪問。若要填充節點,請向節點添加元素。在該代碼示例中,節點被傳遞至方法,該方法將添加子節點。
????{
????????SqlCommand?sqlQuery?=?new?SqlCommand(
????????????"Select?CategoryName,?CategoryID?From?Categories");
????????DataSet?resultSet;
????????resultSet?=?RunQuery(sqlQuery);
????????if?(resultSet.Tables.Count?>?0)
????????{
????????????foreach?(DataRow?row?in?resultSet.Tables[0].Rows)
????????????{
????????????????TreeNode?NewNode?=?new
????????????????????TreeNode(row["CategoryName"].ToString(),
????????????????????row["CategoryID"].ToString());
????????????????NewNode.PopulateOnDemand?=?true;
????????????????NewNode.SelectAction?=?TreeNodeSelectAction.Expand;
????????????????node.ChildNodes.Add(NewNode);
????????????}
????????}
????}
該代碼創建 對象,該對象封裝查詢的文本。代碼將該對象傳遞至一個隨后將要編寫的方法,該方法執行數據庫查詢,并返回 對象。此代碼然后遍歷 DataSet 對象中的記錄,并為每條記錄創建一個新的節點,以數據庫信息設置該節點的文本和值。然后,代碼將每個節點的 屬性設置為 true,以使節點在被單擊時將引發其 TreeNodePopulate 事件。 屬性被設置,以使節點在默認情況下展開。
第二級別的節點將顯示每個類別的產品。由于此原因,填充產品節點需要參數化查詢,以使您能夠檢索當前類別的產品,并以恰當方式填充子節點。
????{
????????SqlCommand?sqlQuery?=?new?SqlCommand();
????????sqlQuery.CommandText?=?"Select?ProductName?From?Products?"?+
????????????"?Where?CategoryID?=?@categoryid";
????????sqlQuery.Parameters.Add("@categoryid",?SqlDbType.Int).Value?=
????????????node.Value;
????????DataSet?ResultSet?=?RunQuery(sqlQuery);
????????if?(ResultSet.Tables.Count?>?0)
????????{
????????????foreach?(DataRow?row?in?ResultSet.Tables[0].Rows)
????????????{
????????????????TreeNode?NewNode?=?new
????????????????????TreeNode(row["ProductName"].ToString());
????????????????NewNode.PopulateOnDemand?=?false;
????????????????NewNode.SelectAction?=?TreeNodeSelectAction.None;
????????????????node.ChildNodes.Add(NewNode);
????????????}
????????}
????} 此代碼與用以填充類別節點的代碼類似。不同之一是 SqlCommand 對象配置有一個參數,在運行時,以用戶單擊的節點(即選擇的類別)的值來設置該參數。另一不同之處是 PopulateOnDemand 屬性設置為 false。這導致產品節點顯示后不帶有展開按鈕,這是必須的,因為產品下再沒有節點。
private?DataSet?RunQuery(SqlCommand?sqlQuery)
????{
????????string?connectionString?=
????????????ConfigurationManager.ConnectionStrings
????????????["NorthwindConnectionString"].ConnectionString;
????????SqlConnection?DBConnection?=
????????????new?SqlConnection(connectionString);
????????SqlDataAdapter?dbAdapter?=?new?SqlDataAdapter();
????????dbAdapter.SelectCommand?=?sqlQuery;
????????sqlQuery.Connection?=?DBConnection;
????????DataSet?resultsDataSet?=?new?DataSet();
????????try
????????{
????????????dbAdapter.Fill(resultsDataSet);
????????}
????????catch
????????{
????????????labelStatus.Text?=?"Unable?to?connect?to?SQL?Server.";
????????}
????????return?resultsDataSet;
????}
總結
以上是生活随笔為你收集整理的在 TreeView 控件中显示分层数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做饭方法
- 下一篇: 安装SQL2K,当创建挂起文件操作之后.