999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ASP.NET的動態導航樹的實現

2008-12-31 00:00:00姚敦紅陳蜀宇蔣啟明
電腦知識與技術 2008年28期

摘要:該文基于在線交互教務管理系統的開發經驗,利用ASP.NET提供的TreeView控件,結合SQL Server數據庫表,采用深度遞歸遍歷算法實現了動態導航樹,并對算法進行了性能分析。

關鍵詞:TreeView;數據庫表;遞歸算法; 動態導航樹

中圖分類號 TP311文獻標識碼:A 文章編號:1009-3044(2008)28-0146-03

Achievement of Dynamic Navigation Tree Based on ASP.NET

YAO Dun-hong1,2,CHEN Shu-yu1,JIANG Qi-ming2

(1.School of Software Engineering, ChongQing University, ChongQing 400030, China;2.Department of Computer Science and Technology of Huaihua University, Hunnan 418008, China)

Abstract: This paper on the basis of the development experience of \" Interactive Online Educational Management System \", using TreeView control provide by ASP.NET, combine SQL Server database table, adopt the depth spreading recursion algorithm has been realized dynamic navigating tree, and has carried on the analysis of performance to the algorithm.

Key words: treeView; database table;algorithm; dynamical navigation tree

1 引言

在使用ASP.NET開發基于WEB的應用系統時,用戶經常希望用樹狀結構來顯示分類或層次數據,比如網站的樹形導航、管理分類導航等。使用這樣的動態顯示技術既簡單又直觀,而且方便用戶訪問。ASP.NET提供的TreeView服務器控件[1]就是以分層的方式向用戶提供信息的,適用分層的數據集、文件夾視圖以及其它類似的數據結構,可以生成用于顯示分層數據的用戶界面。

如何在ASP.NET下實現動態樹型結構的生成,是一直以來的討論話題,筆者結合實際開發經驗,現將利用ASP.NET服務器控件TreeView結合SQL Server2000數據庫設計動態樹型結構的設計與實現總結如下。

2 動態導航樹數據表及訪問技術

與動態樹相對應的樹稱之為靜態樹,靜態樹的生成雖然比較簡單,不需要編寫太多代碼,但其后續維護工作比較復雜。在實際開發過程中,更好的方法是結合數據庫生成動態樹,實現動態綁定顯示節點及增刪節點。

2.1 數據庫表結構設計

表1是筆者在開發在線交互教務管理系統中所設計的導航數據庫表。表中的每一個元組都包含樹中一個節點的信息: 主關鍵字NodeID是結點在樹中的唯一標識; ParentID存放該節點上級節點的NodeID,其中根結點的ParentD設為0;NodeName用于節點名稱,在實際應用中可用于存放希望顯示在網頁上的結點信息;NodeURL存放節點鏈接地址;Pic為顯示在每個節點前的圖形文件地址。

2.2 TreeView控件與數據庫的連接

數據庫表建好后就可在VS2005中創建樹形結構頁面tree.aspx,并從工具框中拖放一個樹形控件,然后的工作就是對其節點數據的添加和綁定及控件事件、效果的添加和設定。

考慮到系統代碼的可重用性[3],按照三層結構進行創建,所以數據層單獨列出并作為一個類[4]進行創建。如DBclass.cs類,其類圖如圖1所示。

其中GetConnection()方法的定義如下:

public static SqlConnection GetConnection()

{ //獲取數據連接語句,并創建數據庫連接對象

String conn = ConfigurationManager.AppSettings[\"sqlconn\"].ToString();

SqlConnection myConn;

myConn = new SqlConnection(conn);

return myConn;

}

另外GetUrl()是根據NodeID標識號取得節點對應URL的方法也在此一并定義。

2.3 數據庫訪問技術

ASP.NET中對數據庫的訪問是通過ADO.NET(動態數據對象)上的ManagedProvide所提供的API來實現的,包括OLEBD和ODBC所支持的數據庫[2]。SqlDataAdapter是DataSet和SQL Server之間的橋接器,用于檢索和保存數據。SqlDataAdapter通過對數據源使用適當的Transact-SQL語句映射Fill(它可更改DataSet中的數據以匹配數據源中的數據)和Update(它可更改數據源中的數據以匹配DataSet中的數據)來提供這一橋接。

首先我們建立Tree類并在類中作如下的定義:

protected SqlConnection myConn;

protected SqlDataAdapter myAdapter;

protected DataSet data;

protected string query;

然后在Tree類中定義一個CreateDataSet方法來建立與數據庫的訪問:

public DataSet CreateDataSet()

{

query = \"select * from sysfuncrights\";

myAdapter = new SqlDataAdapter(query, myConn);

data = new DataSet();

myAdapter.Fill(data, \"query\");

return data;

}

3 深度遍歷遞歸算法

3.1 導航目錄樹的深度遍歷思想

從sysfuncrights數據庫表結構我們可以看出,該表中有一個稱為根的結點,根結點下可以有多個子結點(即一級樹目錄),而每個一級結點下又可有若干個子結點(二級樹目錄),子結點下又可有子結點(三級樹目錄)…,這樣我們可以把sysfuncrights表中記錄之間的關系理解為一個無環路的非連通圖G。

假設給定圖G的初態是所有頂點均未曾訪問過。在G先選根結點v為初始出發點(源點),則深度優先遍歷可定義如下:首先訪問出發點v,并將其標記為已訪問過;然后依次從v出發搜索v的每個鄰接點w。若w未曾訪問過,則以w為新的出發點繼續進行深度優先遍歷,直至圖中所有和源點v有路徑相通的頂點(亦稱為從源點可達的頂點)均已被訪問為止。若此時圖中仍有未訪問的頂點,則另選一個尚未訪問的頂點作為新的源點重復上述過程,直至圖中所有頂點均已被訪問為止[5]。

3.2 深度遍歷遞歸算法的實現

以下是在Tree類中利用深度遍歷遞歸算法定義InitTree方法創建導航目錄樹,其參數可從上面所獲得的data數據集。

//從DataSet中取數據建樹

//從根節點開始遞歸調用顯示子樹

public void InitTree(TreeNodeCollection Nds, string parentId)

{

TreeNode NewNode;

//data為存儲建樹數據信息的數據集

//用父節點進行篩選數據集中信息

DataRow[] rows = data.Tables[0].Select(\"parentId='\" + parentId + \"'\");

foreach (DataRow row in rows)//遍歷當前的所有子節點

{

NewNode = newTreeNode(row[\"NodeName\"].ToString(), row[\"NodeId\"].ToString(), row[\"NodeURL\"].ToString());

NewNode.NavigateUrl = row[\"NodeURL\"].ToString();//取得節點導航路徑

NewNode.ImageUrl = row[\"pic\"].ToString();//取得節點所對應的圖形路徑

Nds.Add(NewNode);//將節點添加到TreeView的節點集合中

InitTree(NewNode.ChildNodes, row[\"NodeId\"].ToString());//遞歸調用

TreeView1.Target = \"wdcontent\";

}

}

4 結果分析

我們知道,對于圖的深度優先算法的時間復雜度為O(n2)[6],這就取決于n規模的大小,如果在開發的應用系統中導航目錄樹節點n不太大的情況下,其效果是不錯的。筆者利用這種算法思想開發在線交互教務管理系統得到的導航目錄樹基本滿足了問題需求,運行結果理想,如圖2所示。

5 結論

通過介紹建立動態導航樹的數據表、存儲到DataSet對象中,并以所獲得的data作為參數使用遞歸算法生成導航樹,闡述了在ASP.NET中使用TreeView控件和數據庫技術創建動態導航樹的具體實現方法和步驟。這種依賴于數據庫生成的導航樹隨著數據源的改變樹結構隨之轉換,避免了靜態導航樹下數據源經常性改變而不得不頻繁修改程序代碼帶來的麻煩,使得在網頁上實現導航樹和在窗體程序中一樣方便。

參考文獻:

[1] 施燕妹,陳培,陳發吉,等. C#語言程序設計教程[M].北京:中國水利水電出版社,2004.

[2] [美]KLAUS MICHELSEN,c# PRIMER PLUS(中文版)[M].北京:人民郵電出版社,2002.

[3] 肖漢.基于可重用構件的軟件開發模式研究[J].微電子學與計算機,2007(1):178-181.

[4] [美]Wendy B,Michael B.UML與Rational Rose 2002從入門到精通[M].北京:電子工業出版社,2002.

[5] 嚴蔚敏,吳偉民.數據結構[M].北京:清華大學出版社,2002.

[6] 鄧芳.關于遞歸算法時間復雜度分析的探討[J].浙江萬里學院學報,2005(4):24-27.

主站蜘蛛池模板: 日韩第九页| 日本在线欧美在线| 伊人久久精品无码麻豆精品| 亚洲第七页| 在线亚洲精品福利网址导航| 香蕉久久永久视频| 日韩欧美国产综合| 亚洲视频免费在线看| 精品亚洲麻豆1区2区3区 | 国产一二三区视频| 日韩精品一区二区三区视频免费看| 中文字幕不卡免费高清视频| 91精品国产丝袜| 国产视频久久久久| 国产a在视频线精品视频下载| 91年精品国产福利线观看久久 | 美女免费黄网站| 97成人在线视频| 国产精品999在线| 亚洲乱码视频| 国产视频a| 精品久久久久久成人AV| 国产av一码二码三码无码 | 久久综合干| 欧美精品1区2区| 欧美成在线视频| 亚洲日本精品一区二区| 欧美h在线观看| 国内精品视频在线| 91精品国产自产91精品资源| 91视频日本| 麻豆精品久久久久久久99蜜桃| 欧美亚洲一二三区| 成人国产精品2021| 日韩国产精品无码一区二区三区| 国产va欧美va在线观看| 91偷拍一区| 久久人体视频| 久久久久青草大香线综合精品| 亚洲综合在线最大成人| 日韩欧美在线观看| 久久这里只有精品8| 54pao国产成人免费视频| 一本二本三本不卡无码| 日韩不卡免费视频| 亚洲精品日产AⅤ| 亚洲第一视频免费在线| 男人天堂亚洲天堂| 久久国产亚洲欧美日韩精品| 波多野结衣AV无码久久一区| 无码高潮喷水专区久久| 国产欧美日韩资源在线观看| 免费a级毛片18以上观看精品| 国产欧美亚洲精品第3页在线| 亚洲日本一本dvd高清| 欧美亚洲国产一区| 国产xx在线观看| 国产杨幂丝袜av在线播放| 国产亚洲精品自在久久不卡| 91啪在线| 91麻豆精品国产91久久久久| 久久久久青草线综合超碰| 免费看美女自慰的网站| 国产日韩精品欧美一区灰| 青草娱乐极品免费视频| 最近最新中文字幕在线第一页| 国产精品无码翘臀在线看纯欲| 五月婷婷伊人网| 久久伊人操| 国产精品天干天干在线观看| 欧美一级色视频| 国产最新无码专区在线| 在线免费a视频| 国产国语一级毛片在线视频| 精品视频在线观看你懂的一区| 成人蜜桃网| 国产精品永久免费嫩草研究院| 成人福利视频网| 亚洲毛片一级带毛片基地| 国产免费人成视频网| 蜜臀AVWWW国产天堂| 美臀人妻中出中文字幕在线|