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

下載本文檔

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

文檔簡(jiǎn)介

VB.NET程序設(shè)計(jì),任務(wù)七 利用高級(jí)控件完善系統(tǒng),本章學(xué)習(xí)目標(biāo): 掌握TreeView、Splitter控件的使用 了解過(guò)程的遞歸調(diào)用 TreeView控件中顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù) 掌握DataGridView控件的使用 掌握DataGrid控件的使用(選學(xué)),目標(biāo),每個(gè)企業(yè)或機(jī)構(gòu)都有層次性,在程序中要顯示出企業(yè)或機(jī)構(gòu)的組織關(guān)系,就要利用樹結(jié)構(gòu)啦。 怎樣把存放在數(shù)據(jù)庫(kù)中的數(shù)據(jù)顯示成樹的結(jié)構(gòu)?,問(wèn)題的引入,任務(wù): 在機(jī)構(gòu)設(shè)計(jì)和編碼窗體中增加TreeView、Splitter控件??梢园裈reeView中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù),同時(shí)也能把數(shù)據(jù)庫(kù)中的數(shù)據(jù)在TreeView 上顯示出來(lái),任務(wù),任務(wù): 在DataGridView控件中顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù),任務(wù),DataGridView控件,TreeView控件用于創(chuàng)建具有樹形節(jié)點(diǎn)的層次結(jié)構(gòu)列表 該控件中每個(gè)節(jié)點(diǎn)還可以包含子節(jié)點(diǎn) 父節(jié)點(diǎn)能夠以展開或折疊方式顯示項(xiàng)目列表 樹狀列表的每個(gè)節(jié)點(diǎn)都是TreeNode類的實(shí)例,TreeView控件的相關(guān)知識(shí),使用TreeView控件設(shè)計(jì)樹狀列表,TreeView 控件的常用屬性、方法和事件:,使用TreeView控件設(shè)計(jì)樹狀列表,樹狀列表的每個(gè)節(jié)點(diǎn)都是TreeNode類的實(shí)例,注意每個(gè)節(jié)點(diǎn)TreeNode還有一個(gè)Nodes屬性。 TreeNode類常用屬性、方法:,使用TreeView控件設(shè)計(jì)樹狀列表,Nodes屬性是TreeNodeCollection類的一個(gè)實(shí)例,是樹狀列表中所有節(jié)點(diǎn)構(gòu)成的集合??梢酝ㄟ^(guò)Nodes(索引值) 來(lái)獲得索引位置的節(jié)點(diǎn),第一個(gè)節(jié)點(diǎn)的索引為0,第二個(gè)為1,依次類推。 TreeNodeCollection類的常用方法如下:,設(shè)計(jì)窗體時(shí)在TreeView中添加節(jié)點(diǎn)的步驟,拖動(dòng)TreeView控件到窗體中 單擊選中Nodes屬性,然后單擊省略號(hào)按鈕 ,打開“樹節(jié)點(diǎn)編輯器” 單擊“添加根”按鈕添加根節(jié)點(diǎn) 單擊“添加子項(xiàng)”按鈕添加當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn) 單擊“刪除”按鈕刪除當(dāng)前節(jié)點(diǎn),程序運(yùn)行時(shí)在TreeView中加入節(jié)點(diǎn)的方法是:使用TreeView控件Nodes屬性的Add方法來(lái)加入根節(jié)點(diǎn),使用某個(gè)節(jié)點(diǎn)的Nodes屬性的Add方法來(lái)加入子節(jié)點(diǎn)。如要建立如圖所示的數(shù)視圖的代碼:,TreeView1.Nodes.Add(“省醫(yī)藥集團(tuán)”) Dim newNode As TreeNode newNode = new TreeNode(“省醫(yī)藥集團(tuán)機(jī)關(guān)”) TreeView1.Nodes(0).Nodes.Add(newNode) newNode.Nodes.Add(“董事會(huì)秘書處”) newNode = new TreeNode(“省醫(yī)藥公司”) TreeView1.Nodes(0).Nodes.Add(newNode) 第1個(gè)根節(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)行時(shí)在TreeView中添加節(jié)點(diǎn),參考代碼1,隨堂練習(xí),1、在窗體設(shè)計(jì)中創(chuàng)建如圖的樹視圖。 2、然后再利用代碼來(lái)創(chuàng)建如圖的樹視圖,參考代碼2,Splitter控件,Splitter 控件用于在運(yùn)行時(shí)調(diào)整??靠丶拇笮?。Splitter控件常用于窗體上控件所顯示的數(shù)據(jù)長(zhǎng)度可變,如Windows資源管理器,它的數(shù)據(jù)窗格所包含的信息在不同的時(shí)間有不同的寬度,Splitter控件,為使用戶能夠在運(yùn)行時(shí)調(diào)整停靠控件的大小,先將調(diào)整大小的控件停靠在容器的一條邊緣(Dock屬性),然后將Splitter控件??吭谠撊萜鞯耐粋?cè)。 如圖所示樣式設(shè)置屬性如下: TreeView1.Dock = Left Splitter1.Dock = Left Panel1.Dock = Fill,Panel控件,過(guò)程的遞歸調(diào)用,Sub F1() F1() End Sub,Sub F1() F2() End Sub Sub F2() F1() End Sub,圖1,圖2,在調(diào)用一個(gè)過(guò)程中又出現(xiàn)直接或間接地調(diào)用該過(guò)程本身,稱為過(guò)程的遞歸調(diào)用。 圖1在調(diào)用F1的過(guò)程中,又要調(diào)用F1過(guò)程,這就是直接調(diào)用本過(guò)程 圖2在調(diào)用F1的過(guò)程中要調(diào)用F2,而在調(diào)用F2過(guò)程中又要調(diào)用F1,這就是間接調(diào)用過(guò)程本身,過(guò)程的遞歸調(diào)用,例如:有3個(gè)人坐在一起,問(wèn)第3個(gè)人多少歲?他說(shuō)比第2個(gè)人大2歲。問(wèn)第2個(gè)人歲數(shù),他說(shuō)比第1個(gè)人大2歲。最后問(wèn)第1個(gè)人,他說(shuō)10歲,請(qǐng)問(wèn)第3人多大,上面兩種遞歸調(diào)用都是無(wú)終止的自身調(diào)用,這是不應(yīng)該出現(xiàn)的。只應(yīng)該出現(xiàn)次數(shù)有限的、有終止的遞歸調(diào)用。這可以用條件控制,只有某個(gè)條件成立才繼續(xù)執(zhí)行遞歸調(diào)用,否則不再繼續(xù)。,過(guò)程的遞歸調(diào)用,顯然該例子是個(gè)遞歸問(wèn)題。要求第3個(gè)人的年齡,就要知道第2個(gè)人的年齡,而第2個(gè)人的年齡也不知道,他的年齡取決于第1個(gè)人的年齡。 age(3) = age(2) + 2 age(2) = age(1) + 2 age(1) = 10 其過(guò)程如下:,age(3 ) =age(2) + 2 age(3)=14 age(2) =age(1) + 2 age(2)=12 age(1) =10,過(guò)程的遞歸調(diào)用,從圖可知,求解分成兩個(gè)階段:第一個(gè)階段是”回推”,即將第n個(gè)人的年齡表示為第(n-1)個(gè)人年齡,直到第1個(gè)人的年齡。此時(shí)age(1)已知,不必再前推。然后開始第二階段,采用遞推方法,從第1個(gè)人的已知推算出第2個(gè)人的年齡。 一個(gè)遞歸的問(wèn)題可以分為“回推”和“遞推”兩個(gè)階段。要經(jīng)歷許多步才能求出最后的值,還必須要有一個(gè)結(jié)束遞歸的條件。例如,age(1)=10,就是使遞歸結(jié)束的條件,過(guò)程的遞歸調(diào)用,可以用一個(gè)函數(shù)來(lái)描述上述過(guò)程: Function age(ByVal n as Integer) As Integer Dim c As Integer if n=1 then c = 10 else c = age(n-1) + 2 遞歸調(diào)用 End if return c End Function,Age(3) 得到age(3),c=age(2)+2,c=age(1)+2,c=10,age函數(shù) n=3,age函數(shù) n=2,age函數(shù) n=1,Age(1) = 10,Age(2) = 12,Age(3) = 14,過(guò)程的遞歸調(diào)用,顯示TreeView控件中的所有節(jié)點(diǎn) Sub PrintNodes() For Each trNode As TreeNode in treeView1.Nodes PrintRecursive(trNode) Next End Sub Sub PrintRecursive(ByVal trNode As TreeNode) MessageBox.Show(trNode.Text) For Each tn As TreeNode in trNodes.Nodes PrintRecursive(tn) 遞歸調(diào)用 Next End Sub,遍歷TreeView控件中每個(gè)節(jié)點(diǎn),利用遞歸方法可完成此操作,該方法循環(huán)訪問(wèn)每個(gè)樹集合中的每個(gè)節(jié)點(diǎn)。,從數(shù)據(jù)庫(kù)中得到數(shù)據(jù)在TreeView控件顯示,有如下的數(shù)據(jù)表(節(jié)點(diǎn)表):,該數(shù)據(jù)表中記錄如下,從數(shù)據(jù)表記錄中: ParentIndex= -1表示該節(jié)點(diǎn)為TreeView控件的根節(jié)點(diǎn). 表中對(duì)應(yīng)的TreeView控件節(jié)點(diǎn)如圖所示:,從數(shù)據(jù)表中以absIndex字段順序查詢出數(shù)據(jù) 調(diào)用InitTree(treeView1.Nodes, “-1”)過(guò)程。該過(guò)程如下 Sub InitTree(ByRef nodes As TreeNodeCollection, ByVal sParentIndex As String) Dim tmpNode As TreeNode ,absIndex As String 選出數(shù)據(jù)源中ParentIndex為sParentIndex數(shù)據(jù)行,放在行集合DataRow的drs中 循環(huán)添加TreeNode, 即添加ParentIndex= sParentIndex的所有記錄(子節(jié)點(diǎn)) For Each dr As DataRow In drs 獲得節(jié)點(diǎn)所需數(shù)據(jù) tmpNode = New TreeNode 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) Next End Sub,從數(shù)據(jù)庫(kù)中得到數(shù)據(jù)在TreeView控件顯示,要利用上面數(shù)據(jù)表中的數(shù)據(jù)在TreeView控件上顯示,也要用到遞歸方法,隨堂練習(xí),利用數(shù)據(jù)庫(kù)節(jié)點(diǎn)表中是數(shù)據(jù),來(lái)創(chuàng)建如下的樹視圖,關(guān)于DataGridView控件,DataGridView控件具有極高的可配置性和可擴(kuò)展性,它提供大量的屬性、方法和事件,可以用來(lái)對(duì)該控件的外觀和行為進(jìn)行自定義。 當(dāng)需要在Windows窗體應(yīng)用程序中顯示表格數(shù)據(jù)時(shí),應(yīng)首先考慮使用DataGridView控件,然后再考慮使用其他控件(例如DataGrid)。 一般設(shè)置兩個(gè)屬性: DataSource:某個(gè)數(shù)據(jù)集對(duì)象 DataMember:該數(shù)據(jù)集對(duì)象的某個(gè)表,用代碼為DataGridView控件獲取數(shù)據(jù)及設(shè)置一些屬性,在屬性窗口設(shè)置DataGridView的屬性,小結(jié),本任務(wù)學(xué)習(xí)了TreeView、DataGridView等高級(jí)控件的使用和過(guò)程的遞歸調(diào)用,完成TreeView控件中的節(jié)點(diǎn)在數(shù)據(jù)庫(kù)的保存,以及數(shù)據(jù)庫(kù)中的數(shù)據(jù)在TreeView控件上的顯示,習(xí)題,以下有關(guān)DataGrid控件的內(nèi)容為選學(xué)內(nèi)容,關(guān)于DataGrid控件,DataGrid控件用于顯示數(shù)據(jù)表中的數(shù)據(jù),該控件可用來(lái)顯示單個(gè)表,也可以顯示多個(gè)不相關(guān)的表,也可以顯示多個(gè)相關(guān)的表。,若工具箱中找不到DataGrid控件,可以在“所用 Windows窗體”分組工具箱中,右鍵,然后選擇“選擇項(xiàng)”,在出現(xiàn)的窗口中,選擇“.NET Framework組件”選項(xiàng)卡,找到“DataGrid”然后在其前面打勾。然后點(diǎn)“確定”。那么DataGrid就添加到工具箱中。,DataGrid控件用于顯示數(shù)據(jù)表中的數(shù)據(jù),該控件可用來(lái)顯示單個(gè)表,也可以顯示多個(gè)不相關(guān)的表,也可以顯示多個(gè)相關(guān)的表 單個(gè)表:該表數(shù)據(jù)顯示在一個(gè)網(wǎng)格中 多個(gè)不相關(guān)的表:網(wǎng)格可顯示一個(gè)樹視圖,可通過(guò)瀏覽該樹視圖找到想要顯示的表。 多個(gè)相關(guān)表:指定讓網(wǎng)格顯示父表。父表中的記錄允許用戶定位到相關(guān)的子行,DataGrid控件的相關(guān)知識(shí),DataGrid控件應(yīng)在設(shè)計(jì)時(shí)使用DataSource和DataMember屬性,或在運(yùn)行時(shí)使用SetDataBinding方法將其綁定到數(shù)據(jù)源。 對(duì)于DataGrid有效的數(shù)據(jù)源包括:DataTable類對(duì)象、DataView類對(duì)象、DataSet類對(duì)象和DataViewManager類對(duì)象等。,DataGrid控件的相關(guān)知識(shí),在DataGrid控件中顯示數(shù)據(jù),DataGrid控件顯示數(shù)據(jù)表中的數(shù)據(jù),有下面兩種方法: 在程序中寫代碼顯示數(shù)據(jù)表數(shù)據(jù) 窗體設(shè)計(jì)時(shí)顯示數(shù)據(jù)表的數(shù)據(jù),利用代碼在DataGrid控件中顯示數(shù)據(jù),利用程序代碼在DataGrid控件中顯示單個(gè)數(shù)據(jù)表數(shù)據(jù),Dim sConnString As String = “連接字符串“ Dim Mycn As New OleDbConnection(sConnString) Dim sqlStr As String = “Select * from 表名” Dim myDataAdapter As New OleDbDataAdapter(sqlStr,Mycn) Dim myDataSet As New DataSet() myDataAdapter.Fill(ds,“表名”) 將數(shù)據(jù)集綁定到DataGrid控件上 dataGrid1.SetDataBinding(ds,”表名”),隨堂練習(xí),利用代碼在DataGrid中顯示數(shù)據(jù)表中的數(shù)據(jù),將使用OleDbDataAdapter控件將數(shù)據(jù)庫(kù)引入程序,然后利用DataGrid控件,將數(shù)據(jù)顯示出來(lái)。同時(shí)該控件還具有更新數(shù)據(jù)庫(kù)數(shù)據(jù)的功能。 操作過(guò)程如下: 將OleDbDataAdapter控件從工具箱的數(shù)據(jù)工具組中拖入設(shè)計(jì)窗口中,此時(shí)出現(xiàn)數(shù)據(jù)適配器配置向?qū)?單擊下一步按鈕,進(jìn)入選擇數(shù)據(jù)連接頁(yè)面。單擊新建連接按鈕 出現(xiàn)數(shù)據(jù)連接屬性對(duì)話框,在提供程序選項(xiàng)卡中選擇Microsoft Jet 4.0 OLE DB Provider,在連接選項(xiàng)卡中選擇要連接到的Access數(shù)據(jù)庫(kù)。 單擊測(cè)試連接按鈕,顯現(xiàn)“測(cè)試連接成功”對(duì)話框,說(shuō)明數(shù)據(jù)庫(kù)連接成功,窗體設(shè)計(jì)時(shí)在DataGrid控件中顯示數(shù)據(jù),單擊確定按鈕,返回選擇您的數(shù)據(jù)連接對(duì)話框,單擊下一步按鈕,進(jìn)入選擇查詢類型界面中,選擇使用SQL語(yǔ)句 單擊下一步按鈕,進(jìn)入生成SQL語(yǔ)句界面 單擊查詢生成器按鈕,出現(xiàn)查詢生成器和添加表對(duì)話框。 選擇你要顯示的數(shù)據(jù)表。在查詢生成器中選擇要查詢和列 單擊確定按鈕返回生成SQL語(yǔ)句界面。確定查詢無(wú)誤后,單擊下一步按鈕,出現(xiàn)查看向?qū)ЫY(jié)果界面 單擊確定按鈕,返回設(shè)計(jì)窗口中,選擇OleDbDataAdapter1,在屬性窗口出現(xiàn)生成數(shù)據(jù)集選項(xiàng)。,窗體設(shè)計(jì)時(shí)在DataGrid控件中顯示數(shù)據(jù)(續(xù)),單擊生成數(shù)據(jù)集選項(xiàng),出現(xiàn)生成數(shù)據(jù)集對(duì)話框。使用默認(rèn)選項(xiàng),單擊確定按鈕,生成數(shù)據(jù)集合 從 工具箱的Windows窗體中拖動(dòng)DataGrid控件到設(shè)計(jì)窗口 設(shè)置DataGrid控件的DataSource屬性為剛才生成的數(shù)據(jù)集,選擇DataMemeber屬性為要查詢的表名 最后,要在要查看數(shù)據(jù)事件寫如下代碼 OleDbDataAdapter1.Fill(DataSet11,”表名”),窗體設(shè)計(jì)時(shí)在DataGrid控件中顯示數(shù)據(jù)(續(xù)),隨堂練習(xí),在窗體中設(shè)計(jì)在DataGrid中顯示數(shù)據(jù)表中的數(shù)據(jù),DataGrid控件的表樣式指定了特定表的格式設(shè)置,每個(gè)表一次只能定義一個(gè)表樣式,可通過(guò)DataGridTableStyles類的實(shí)例來(lái)設(shè)置表樣式 可借助DataGridColumnStyles類實(shí)例來(lái)創(chuàng)建一組自定義列樣式。 在窗體設(shè)計(jì)時(shí)設(shè)置數(shù)據(jù)表的表樣式和列樣式的步驟如下: 選擇窗體上的DataGrid控件,在“屬性”窗口中,選擇TableStyles屬性并單擊省略號(hào),將會(huì)打開”DataGridTableStyle集合編輯器”對(duì)話框。 單擊 添加按鈕添加表樣式后,在MappingName屬性中,為表樣式設(shè)置映射名稱。映射名稱用于指定哪個(gè)表使用該樣式,設(shè)置DataGrid控件的表樣式和列樣式,單擊 添加按鈕添加表樣式后,在MappingName屬性中,為表樣式設(shè)置映射名稱。映射名稱用于指定哪個(gè)表使用該樣式,設(shè)置DataGrid控件的表樣式和列樣式,在表樣式中添加列樣式設(shè)置列的顯示格式。在“DataGridTableStyles集合編輯器”對(duì)話框中,選擇GridColumnStyle屬性并單擊省略號(hào)按鈕,將打開“GridColumnStyle集合編輯器”對(duì)話框。如圖所示,設(shè)置DataGrid控件的表樣式和列樣式,單擊添加,將一個(gè)列樣式添加到集合中 在MappingName屬性中,為列樣式設(shè)置映射名稱。映射名稱用于指定哪個(gè)字段應(yīng)該使用這個(gè)列樣式。 在“GridColumnStyle集合編輯器”對(duì)話框中還可設(shè)置該列的列寬、對(duì)齊方式、列標(biāo)題等。 重復(fù)上一步,為更多的列設(shè)置列樣式。,設(shè)置DataGrid控件的表樣式和列樣

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論