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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

在 TreeView 控件中显示分层数据

發布時間:2024/4/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在 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;
????????????}
????????}
????}

當用戶單擊一個節點以打開該節點時,會調用此代碼。因為需要在樹的不同級別顯示不同的數據,所以必須確定用戶單擊的節點深度,然后適當地填充該級別的節點。在此演練中,如果用戶單擊根節點(深度為 0),則調用 PopulateCategories 方法。如果用戶單擊類別名稱(深度為 1),則調用 PopulateProducts 方法。這些方法在下一節中演示。
對象提供對當前節點的編程訪問。若要填充節點,請向節點添加元素。在該代碼示例中,節點被傳遞至方法,該方法將添加子節點。

void?PopulateCategories(TreeNode?node)
????{
????????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 事件。 屬性被設置,以使節點在默認情況下展開。

第二級別的節點將顯示每個類別的產品。由于此原因,填充產品節點需要參數化查詢,以使您能夠檢索當前類別的產品,并以恰當方式填充子節點。

void?PopulateProducts(TreeNode?node)
????{
????????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 控件中显示分层数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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