7任務(wù)七 利用高級控件完善系統(tǒng)_第1頁
7任務(wù)七 利用高級控件完善系統(tǒng)_第2頁
7任務(wù)七 利用高級控件完善系統(tǒng)_第3頁
7任務(wù)七 利用高級控件完善系統(tǒng)_第4頁
7任務(wù)七 利用高級控件完善系統(tǒng)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

VB.NET程序設(shè)計任務(wù)七

利用高級控件完善系統(tǒng)本章學(xué)習(xí)目標(biāo):掌握TreeView、Splitter控件的使用了解過程的遞歸調(diào)用TreeView控件中顯示數(shù)據(jù)庫中的數(shù)據(jù)掌握DataGridView控件的使用目標(biāo)每個企業(yè)或機(jī)構(gòu)都有層次性,在程序中要顯示出企業(yè)或機(jī)構(gòu)的組織關(guān)系,就要利用樹結(jié)構(gòu)啦。 怎樣把存放在數(shù)據(jù)庫中的數(shù)據(jù)顯示成樹的結(jié)構(gòu)?問題的引入 在“機(jī)構(gòu)設(shè)計情況”窗體中增加TreeView、Splitter控件。可以把數(shù)據(jù)庫中的數(shù)據(jù)在TreeView

上顯示出來,在單擊某節(jié)點(diǎn)時,把該節(jié)點(diǎn)對應(yīng)的一些信息在文本框TextBox里顯示出來。 任務(wù)TreeView控件Splitter控件任務(wù):

在DataGridView控件中顯示數(shù)據(jù)庫中的數(shù)據(jù)

任務(wù)DataGridView控件

TreeView控件用于創(chuàng)建具有樹形節(jié)點(diǎn)的層次結(jié)構(gòu)列表該控件中每個節(jié)點(diǎn)還可以包含子節(jié)點(diǎn)父節(jié)點(diǎn)能夠以展開或折疊方式顯示項目列表樹狀列表的每個節(jié)點(diǎn)都是TreeNode類的實例TreeView控件的相關(guān)知識使用TreeView控件設(shè)計樹狀列表屬性描述Nodes所有節(jié)點(diǎn)(TreeNode)組成集合(代碼中單獨(dú)使用時,表示根節(jié)點(diǎn))SelectedNode返回或設(shè)定當(dāng)前選定的節(jié)點(diǎn)。方法描述ExpendAll展開列表樹的全部節(jié)點(diǎn).該方法沒有參數(shù)事件描述AfterSelect當(dāng)用戶在TreeView控件中單擊節(jié)點(diǎn)時觸發(fā)AfterSelect事件TreeView

控件的常用屬性、方法和事件:使用TreeView控件設(shè)計樹狀列表屬性描述Nodes當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)(TreeNode)組成的集合Text節(jié)點(diǎn)顯示的內(nèi)容Parent返回當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)Checked節(jié)點(diǎn)是否被選中方法描述New()TreeNode的構(gòu)造函數(shù)。創(chuàng)建顯示內(nèi)容為空的節(jié)點(diǎn)New(strAsString)TreeNode的構(gòu)造函數(shù)。創(chuàng)建顯示內(nèi)容為str參數(shù)的值的節(jié)點(diǎn)Remove()刪除當(dāng)前節(jié)點(diǎn)樹狀列表的每個節(jié)點(diǎn)都是TreeNode類的實例,注意每個節(jié)點(diǎn)TreeNode還有一個Nodes屬性。TreeNode類常用屬性、方法:使用TreeView控件設(shè)計樹狀列表方法描述Add(strAsString)在相應(yīng)節(jié)點(diǎn)下添加子節(jié)點(diǎn),子節(jié)點(diǎn)名為str的參數(shù)值A(chǔ)dd(TreeNode實例)在相應(yīng)節(jié)點(diǎn)下添加子節(jié)點(diǎn)TreeNode實例Remove(TreeNode實例)在相應(yīng)節(jié)點(diǎn)下刪除TreeNode實例的子節(jié)點(diǎn)Clear()刪除相應(yīng)節(jié)點(diǎn)下的所有子節(jié)點(diǎn)Nodes屬性是TreeNodeCollection類的一個實例,是樹狀列表中所有節(jié)點(diǎn)構(gòu)成的集合??梢酝ㄟ^Nodes(索引值)來獲得索引位置的節(jié)點(diǎn),第一個節(jié)點(diǎn)的索引為0,第二個為1,依次類推。

TreeNodeCollection類的常用方法如下:設(shè)計窗體時在TreeView中添加節(jié)點(diǎn)的步驟拖動TreeView控件到窗體中單擊選中Nodes屬性,然后單擊省略號按鈕,打開“樹節(jié)點(diǎn)編輯器”單擊“添加根”按鈕添加根節(jié)點(diǎn)單擊“添加子項”按鈕添加當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)單擊“刪除”按鈕刪除當(dāng)前節(jié)點(diǎn)程序運(yùn)行時在TreeView中加入節(jié)點(diǎn)的方法是:使用TreeView控件Nodes屬性的Add方法來加入根節(jié)點(diǎn),使用某個節(jié)點(diǎn)的Nodes屬性的Add方法來加入子節(jié)點(diǎn)。如要建立如圖所示的樹視圖的代碼:TreeView1.Nodes.Add(“省醫(yī)藥集團(tuán)”)DimnewNodeAsTreeNodenewNode=newTreeNode(“省醫(yī)藥集團(tuán)機(jī)關(guān)”)TreeView1.Nodes(0).Nodes.Add(newNode)‘newNode.Nodes.Add(“董事會秘書處”)newNode=newTreeNode(“省醫(yī)藥公司”)TreeView1.Nodes(0).Nodes.Add(newNode)’第1個根節(jié)點(diǎn)下添加子節(jié)點(diǎn)newNode.Nodes.Add(“經(jīng)理辦公室”)’在省醫(yī)藥公司節(jié)點(diǎn)下添加子節(jié)點(diǎn)‘TreeView1.Nodes.Remove(TreeView1.SelectedNode)‘刪除選定的節(jié)點(diǎn)程序運(yùn)行時在TreeView中添加節(jié)點(diǎn)隨堂實訓(xùn)

1、在窗體設(shè)計中創(chuàng)建如圖的樹視圖。2、然后再利用代碼來創(chuàng)建如圖的樹視圖參考代碼1參考代碼2隨堂實訓(xùn)3、用代碼創(chuàng)建如圖所示的樹結(jié)構(gòu)圖Splitter控件Splitter控件用于在運(yùn)行時調(diào)整??靠丶拇笮 plitter控件常用于窗體上控件所顯示的數(shù)據(jù)長度可變,如Windows資源管理器,它的數(shù)據(jù)窗格所包含的信息在不同的時間有不同的寬度Splitter控件

為使用戶能夠在運(yùn)行時調(diào)整??靠丶拇笮。葘⒄{(diào)整大小的控件??吭谌萜鞯囊粭l邊緣(Dock屬性),然后將Splitter控件??吭谠撊萜鞯耐粋?cè)。

如圖所示樣式設(shè)置屬性如下:

TreeView1.Dock=LeftSplitter1.Dock=Left

GroupBox1.Dock=FillGroupBoxTreeViewSplitter過程的遞歸調(diào)用SubF1()F1() EndSubSubF1()F2() EndSubSubF2()F1() EndSub圖1圖2在調(diào)用一個過程中又出現(xiàn)直接或間接地調(diào)用該過程本身,稱為過程的遞歸調(diào)用。圖1在調(diào)用F1的過程中,又要調(diào)用F1過程,這就是直接調(diào)用本過程圖2在調(diào)用F1的過程中要調(diào)用F2,而在調(diào)用F2過程中又要調(diào)用F1,這就是間接調(diào)用過程本身過程的遞歸調(diào)用

例如:有3個人坐在一起,問第3個人多少歲?他說比第2個人大2歲。問第2個人歲數(shù),他說比第1個人大2歲。最后問第1個人,他說10歲,請問第3人多大上面兩種遞歸調(diào)用都是無終止的自身調(diào)用,這是不應(yīng)該出現(xiàn)的。只應(yīng)該出現(xiàn)次數(shù)有限的、有終止的遞歸調(diào)用。這可以用條件控制,只有某個條件成立才繼續(xù)執(zhí)行遞歸調(diào)用,否則不再繼續(xù)。過程的遞歸調(diào)用

顯然該例子是個遞歸問題。要求第3個人的年齡,就要知道第2個人的年齡,而第2個人的年齡也不知道,他的年齡取決于第1個人的年齡。

age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10其過程如下:age(3)=age(2)+2age(3)=14age(2)=age(1)+2age(2)=12age(1)

=10

過程的遞歸調(diào)用

從圖可知,求解分成兩個階段:第一個階段是”回推”,即將第n個人的年齡表示為第(n-1)個人年齡……,直到第1個人的年齡。此時age(1)已知,不必再前推。然后開始第二階段,采用遞推方法,從第1個人的已知推算出第2個人的年齡……。一個遞歸的問題可以分為“回推”和“遞推”兩個階段。要經(jīng)歷許多步才能求出最后的值,還必須要有一個結(jié)束遞歸的條件。例如,age(1)=10,就是使遞歸結(jié)束的條件過程的遞歸調(diào)用可以用一個函數(shù)來描述上述過程:

Functionage(ByValnasInteger)AsInteger DimcAsInteger ifn=1then c=10 else c=age(n-1)+2‘遞歸調(diào)用

Endif returncEndFunction

Age(3)得到age(3)c=age(2)+2c=age(1)+2c=10age函數(shù)n=3age函數(shù)n=2age函數(shù)n=1Age(1)=10Age(2)=12Age(3)=14過程的遞歸調(diào)用‘顯示TreeView控件中的所有節(jié)點(diǎn)SubPrintNodes()ForEachtrNodeAsTreeNodeintreeView1.Nodes‘此處Nodes表示樹視圖控件的根節(jié)點(diǎn)

PrintRecursive(trNode)NextEndSub

SubPrintRecursive(ByVal

trNodeAsTreeNode)

MessageBox.Show(trNode.Text)ForEachtnAsTreeNodeintrNode.Nodes‘此處Nodes表示的是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)

PrintRecursive(tn) ‘遞歸調(diào)用NextEndSub

遍歷TreeView控件中每個節(jié)點(diǎn),利用遞歸方法可完成此操作,該方法循環(huán)訪問每個樹集合中的每個節(jié)點(diǎn)。

從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示字段名類別

AbsIndex

ParentIndex

字段類型文本數(shù)字?jǐn)?shù)字說明節(jié)點(diǎn)顯示的內(nèi)容節(jié)點(diǎn)索引

對應(yīng)的父節(jié)點(diǎn)索引有如下的數(shù)據(jù)表(節(jié)點(diǎn)表):該數(shù)據(jù)表中記錄如下從數(shù)據(jù)表記錄中:ParentIndex=-1表示該節(jié)點(diǎn)為TreeView控件的根節(jié)點(diǎn).表中對應(yīng)的TreeView控件節(jié)點(diǎn)如圖所示:‘從數(shù)據(jù)表中以absIndex字段順序查詢出數(shù)據(jù)‘調(diào)用InitTree(treeView1.Nodes,“-1”)過程。該過程如下SubInitTree(ByRefnodesAsTreeNodeCollection,ByVal

sParentIndexAsString)DimtmpNodeAsTreeNode,absIndexAsString‘選出數(shù)據(jù)源中ParentIndex為sParentIndex數(shù)據(jù)行,放在行集合DataRow的drs中

‘循環(huán)添加TreeNode,即添加ParentIndex=sParentIndex的所有記錄(子節(jié)點(diǎn))ForEachdrAsDataRowIndrs'獲得節(jié)點(diǎn)所需數(shù)據(jù)

tmpNode=NewTreeNode

tmpNode.Text=dr("類別")

absIndex=dr("AbsIndex")

nodes.Add(tmpNode)'添加節(jié)點(diǎn)

‘遞歸調(diào)用,添加子節(jié)點(diǎn)下的所有子節(jié)點(diǎn)

InitTree(nodes(nodes.Count-1).Nodes,absIndex)NextEndSub從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示

要利用上面數(shù)據(jù)表中的數(shù)據(jù)在TreeView控件上顯示,也要用到遞歸方法。

把和節(jié)點(diǎn)有關(guān)的表比如“節(jié)點(diǎn)表”直接拖到窗體上,接著,不用的控件刪除,比如:DataGridView,BindingNavigator。然后添加一TreeView控件。最終界面如圖所示。從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---代碼從數(shù)據(jù)庫中得到數(shù)據(jù)在TreeView控件顯示---運(yùn)行效果隨堂實訓(xùn)利用數(shù)據(jù)庫節(jié)點(diǎn)表中的數(shù)據(jù),來創(chuàng)建如下的樹視圖關(guān)于DataGridView控件當(dāng)需要在Windows窗體應(yīng)用程序中顯示表格數(shù)據(jù)時,應(yīng)首先考慮使用DataGridView控件。使用DataGridView控制外觀顯示方式---調(diào)整列寬調(diào)整列寬通過屬性AutoSizeColumnsMode實現(xiàn),取值主要包括:AllCells:調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,包括標(biāo)題單元格。AllCellsExceptHeader:調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,不包括標(biāo)題單元格。ColumnHeader:調(diào)整列寬,以適合列標(biāo)題單元格的內(nèi)容。DisplayCells:調(diào)整列寬,以適合當(dāng)前屏幕上顯示的行的列中的所有單元格的內(nèi)容,包括標(biāo)題單元格。DisplayCellsExceptHeader:調(diào)整列寬,以適合當(dāng)前屏幕上顯示的行的列中的所有單元格的內(nèi)容,不包括標(biāo)題單元格使用DataGridView控制外觀顯示方式---某列單元格顯示格式與字體通過屬性Columns

DefaultCellStyle設(shè)置:使用DataGridView控制外觀顯示方式---某列單元格顯示格式與字體外觀格式設(shè)置顏色和字體等Format設(shè)置單元格的格式字符串設(shè)置了格式的列未設(shè)置格式的列使用DataGridView控制外觀顯示方式---奇數(shù)行的單元格樣式小結(jié)

本任務(wù)學(xué)習(xí)了TreeView、DataGridView等高級控件的使用和過程的遞歸調(diào)用。完成數(shù)據(jù)庫中的數(shù)據(jù)在TreeView控件上的顯示。習(xí)題實訓(xùn)單擊TreeView的某節(jié)點(diǎn)時,把該節(jié)點(diǎn)對應(yīng)的一些信息在文本框TextBox里顯示出來。實訓(xùn)—參考答案(新版本不用DataView對象)實訓(xùn)—參考答案step1創(chuàng)建一樹節(jié)點(diǎn)類(TreeNodeData),然后:

1)添加五個Public字段:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論