• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      C#在組合框中實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)數(shù)據(jù)

      2016-08-12 02:15:34葛玉曾垂振楊云飛
      中國(guó)新通信 2016年13期

      葛玉 曾垂振 楊云飛

      【摘要】 本文通過(guò)分析了如何在C#中的組合框控件中實(shí)現(xiàn)多層次的樹(shù)形結(jié)構(gòu)列表數(shù)據(jù),使其具有TreeView的功能與特性,并以創(chuàng)建一個(gè)樹(shù)形結(jié)構(gòu)列表的用戶控件為例詳細(xì)闡述了實(shí)現(xiàn)方法。

      【關(guān)鍵詞】 組合框 樹(shù)形結(jié)構(gòu) C# TreeView

      C#是一種基于現(xiàn)代面向?qū)ο笤O(shè)計(jì)方法的語(yǔ)言,它是基于C語(yǔ)言和Microsoft.NET平臺(tái)開(kāi)發(fā)的,它具有簡(jiǎn)單、現(xiàn)代、通用的特點(diǎn),它讓程序員可以快速地編寫(xiě)各種基于Microsoft. NET平臺(tái)的應(yīng)用程序。組合框combox是一個(gè)常用控件,通常用作選擇器,在Visual Studio 2008軟件中,組合框有兩種方式,一種是不可輸入的下拉列表,一種是帶輸入框的下拉列表框,無(wú)論是哪一種方式,其下拉列表都是單一的項(xiàng)目列出,各項(xiàng)目之間為并列關(guān)系,如果想在組合框中實(shí)現(xiàn)帶層次關(guān)系的下拉選擇項(xiàng),以組合框自帶的屬性無(wú)法實(shí)現(xiàn)。本文將通過(guò)一個(gè)全國(guó)行政區(qū)域選擇的實(shí)例,介紹如何在Visual Studio 2008中實(shí)現(xiàn)帶樹(shù)形結(jié)構(gòu)下拉選擇項(xiàng)的組合框,數(shù)據(jù)庫(kù)采用SQL Server2005。

      一、數(shù)據(jù)表設(shè)計(jì)

      需要實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的數(shù)據(jù)源是全國(guó)行政區(qū)域,分為省市區(qū)三級(jí),主要有2個(gè)字段,即代碼(DM),區(qū)域名稱(chēng)(MC),以代碼來(lái)區(qū)分省、市、區(qū)的層級(jí)關(guān)系,兩位代碼為一層,如:北京市為11,市轄區(qū)為1101,東城區(qū)為110101,北京市下轄縣為1102,密云縣為110228;以代碼的位數(shù)來(lái)區(qū)分行政區(qū)域樹(shù)中各節(jié)點(diǎn)的位置。全國(guó)行政區(qū)劃表結(jié)構(gòu)如表1所示。

      二、創(chuàng)建用戶控件UserControls

      用戶控件UserControls就是用戶自定義的控件,其好處就是代碼的復(fù)用性能夠在多個(gè)項(xiàng)目中調(diào)用該控件,將帶有樹(shù)形結(jié)構(gòu)數(shù)據(jù)的組合框創(chuàng)建為用戶控件,在需要的時(shí)候可以自由調(diào)用。

      在Visual Studio 2008設(shè)計(jì)器中,添加用戶控件,起名為UcCombTree,系統(tǒng)會(huì)自動(dòng)生成一個(gè)UcCombTree.cs的類(lèi),在代碼編輯器中,將其繼承類(lèi)改為ComboBox,使該用戶控件具有組合框ComboBox的特性,具體代碼如下所示:

      public partial class UcCombTree : ComboBox

      三、構(gòu)造控件屬性及事件

      用戶控件創(chuàng)建后,必須在函數(shù)中構(gòu)造與控件相對(duì)應(yīng)的屬性及事件,以方便在其它地方使用。針對(duì)組合框的特性,必須要構(gòu)造的事件有下拉列表展開(kāi)DropDown事件,具體代碼如下:

      ToolStripDropDown dropDown;

      在下拉列表中的選項(xiàng)為樹(shù)形結(jié)構(gòu),即應(yīng)該有TreeView的特性,所以相應(yīng)的也需要構(gòu)造與TreeView有關(guān)的事件,包括有樹(shù)節(jié)點(diǎn)雙擊DoubleClick,選中樹(shù)節(jié)點(diǎn)SelectNode,通過(guò)代碼執(zhí)行完成后,重新生成解決方案,在Visual Studio 2008設(shè)計(jì)器的工具箱中出現(xiàn)一個(gè)新的組件UcCombTree.

      四、帶樹(shù)形結(jié)構(gòu)下拉選擇項(xiàng)組合框的實(shí)現(xiàn)

      將組件UcCombTree拖動(dòng)到程序界面中,呈現(xiàn)出來(lái)的樣式為組合框樣式,如圖1所示。

      下面要解決的問(wèn)題就是將行政區(qū)劃數(shù)據(jù)表中的內(nèi)容添加到UcCombTree的下拉列表中。在前面設(shè)計(jì)中,已經(jīng)在用戶控件UcCombTree中添加了與TreeView相關(guān)的屬性與事件,在構(gòu)造行政區(qū)劃樹(shù)結(jié)構(gòu)時(shí),可直接使用TreeView的特性,將數(shù)據(jù)內(nèi)容加載到TreeView上。可構(gòu)造創(chuàng)建樹(shù)的函數(shù)CreatTree,函數(shù)中設(shè)定兩個(gè)參數(shù),一個(gè)為目標(biāo)樹(shù),另一個(gè)為數(shù)據(jù)來(lái)源。因?yàn)橛脩艨丶cCombTree也具有TreeView的特性,所以目標(biāo)樹(shù)即可設(shè)定為UcCombTree,數(shù)據(jù)來(lái)源采用DataTable。函數(shù)在執(zhí)行過(guò)程中,采用遍歷的方法,在數(shù)據(jù)表從前往后依次讀取每一個(gè)數(shù)據(jù),首先依據(jù)行政區(qū)劃代碼的長(zhǎng)度來(lái)判斷該點(diǎn)屬于哪一節(jié)節(jié)點(diǎn),2位則為第一級(jí),4位則為第2級(jí),6位則為第3級(jí);如果某個(gè)數(shù)非第一級(jí)節(jié)點(diǎn),使用截取函數(shù),獲取該代碼的前2位以判斷其上級(jí)節(jié)點(diǎn)位置,按此方法將數(shù)據(jù)表中的所有數(shù)據(jù)讀取完畢。

      實(shí)現(xiàn)算法如下:

      {

      遍歷數(shù)據(jù)表中的所有數(shù)據(jù);

      {

      讀取行政區(qū)劃代碼;

      讀取行政區(qū)劃地域名稱(chēng);

      在樹(shù)節(jié)點(diǎn)上記錄地域代碼和地域名稱(chēng);

      If(代碼長(zhǎng)度為2)

      {

      則增加為第一層節(jié)點(diǎn);

      }

      Else

      {

      找到該代碼的上一級(jí)代碼,添加為上一級(jí)代碼的子節(jié)點(diǎn);

      }

      }

      帶樹(shù)形結(jié)構(gòu)的組合框在程序中的應(yīng)用如圖2所示。每個(gè)節(jié)點(diǎn)都對(duì)應(yīng)數(shù)據(jù)庫(kù)中的代碼與名稱(chēng)兩個(gè)字段,使用數(shù)據(jù)時(shí),如果需要地域名拼接,可把需要的節(jié)點(diǎn)名稱(chēng)連接起來(lái);如果不拼接,讀取當(dāng)前節(jié)點(diǎn)名即可。

      五、 結(jié)束語(yǔ)

      在C#中利用用戶控件構(gòu)建成帶有樹(shù)形結(jié)構(gòu)數(shù)據(jù)的組合框,將復(fù)雜的算法形成函數(shù)在用戶控件類(lèi)中實(shí)現(xiàn),在需要反復(fù)調(diào)用時(shí),只需要按照數(shù)據(jù)的規(guī)律修改數(shù)據(jù)讀取的方法即可。用戶控件與數(shù)據(jù)庫(kù)的有效結(jié)合也加快了程序運(yùn)行的速度。

      參 考 文 獻(xiàn)

      [1] 郭忠南,層次結(jié)構(gòu)數(shù)據(jù)在組合框中樹(shù)形效果的動(dòng)態(tài)實(shí)現(xiàn),計(jì)算機(jī)時(shí)代,2012.7

      [2] 吳文強(qiáng),用自定義TreeView控件實(shí)現(xiàn)層次結(jié)構(gòu)數(shù)據(jù)瀏覽功能,電腦編程技巧與維護(hù),2012.9

      泽库县| 东方市| 阿瓦提县| 兰州市| 绵竹市| 白玉县| 万源市| 县级市| 长沙县| 鲜城| 开原市| 长武县| 哈尔滨市| 黎城县| 扎兰屯市| 大余县| 沅陵县| 恩平市| 离岛区| 翁牛特旗| 韶关市| 那坡县| 涪陵区| 琼海市| 苍山县| 中宁县| 榆树市| 象州县| 沅陵县| 牟定县| 汽车| 东乡族自治县| 邯郸市| 云安县| 荥经县| 会同县| 洛阳市| 安龙县| 浙江省| 棋牌| 清水河县|