版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、教學(xué)目標(biāo):通過本節(jié)學(xué)習(xí),要讓學(xué)生掌握DataAdapter、DataSet以及DataView等對(duì)象的屬性、方法和事件,能夠進(jìn)行簡單的數(shù)據(jù)庫訪問操作。通過講授和學(xué)生的動(dòng)手練習(xí),使學(xué)生了解VB。Net的數(shù)據(jù)庫編程的一些常用技巧。教學(xué)類型:在多媒體教室直觀講授,引導(dǎo)學(xué)生進(jìn)行簡單的數(shù)據(jù)庫操作程序設(shè)計(jì)操作。教學(xué)內(nèi)容:7.6 DataAdapter 對(duì)象在.NET框架中,DataAdapter對(duì)象可以從中央數(shù)據(jù)源移動(dòng)數(shù)據(jù)到本地DataSet,也可以使DataSet產(chǎn)生的改變返回到數(shù)據(jù)源,它使用.NET管理支持程序的Connection對(duì)象連接數(shù)據(jù)源,并使用Command對(duì)象獲取數(shù)據(jù)。DataAdapte
2、r實(shí)際上減弱DataSet對(duì)象對(duì)實(shí)際數(shù)據(jù)源的影響, 如果要通過“數(shù)據(jù)”工具箱中的控件來創(chuàng)建DataAdapter對(duì)象,可參照下面的操作步驟。(1)在當(dāng)前窗體中創(chuàng)建一個(gè)Connection對(duì)象,例如,SqlConnection1。(2)從“數(shù)據(jù)”工具箱中選擇一個(gè)DataAdapter控件,例如,SqlDataAdapter控件。然后單擊窗體,在創(chuàng)建一個(gè)SqlDataAdapter對(duì)象的同時(shí)打開“數(shù)據(jù)適配器配置向?qū)А睂?duì)話框,該向?qū)Э梢灾付ㄟB接以及數(shù)據(jù)適配器,用以選擇記錄并處理數(shù)據(jù)庫更改的命令。(3)打開“數(shù)據(jù)適配器配置向?qū)А睂?duì)話框,選擇“數(shù)據(jù)適配器應(yīng)使用哪一種數(shù)據(jù)連接”下拉列表框中選擇一個(gè)已經(jīng)存在
3、于當(dāng)前數(shù)據(jù)連接列表中的連接。(4)確認(rèn)選擇的連接之后,打開“選擇查詢類型”對(duì)話框。通過選擇單選按鈕,可以確定數(shù)據(jù)適配器如何訪問數(shù)據(jù)庫。可以指定一個(gè)Select語句來加載數(shù)據(jù),向?qū)⑸蒊nsert,Update和Delete語句,以保存數(shù)據(jù)更改。(5)選擇訪問數(shù)據(jù)庫的訪問方式之后,在中間的文本框中手動(dòng)輸入SQL Select語句,或者單擊“查詢生成器”按鈕利用查詢生成器來創(chuàng)建查詢語句。 (6)數(shù)據(jù)適配器配置完成之后,可以設(shè)置SqlDataAdapter1的默認(rèn)屬性,并可以通過下面的超級(jí)鏈接重新配置適配器、生成DataSet和預(yù)覽DataSet中的數(shù)據(jù)。DataAdapter的SelectCom
4、mand屬性是一個(gè)用于獲取數(shù)據(jù)源中數(shù)據(jù)的Command對(duì)象。DataAdapter的InsertCommand,UpdateCommand和DeleteCommand屬性是根據(jù)DataSet中對(duì)數(shù)據(jù)的改變來更新數(shù)據(jù)源中數(shù)據(jù)的Command對(duì)象。DataAdapter的Fill方法用于處理含有DataAdapter中SelectCommand的結(jié)果值的DataSet,它也添加或刷新DataSet中的行以匹配數(shù)據(jù)源中的行。如果要通過代碼來創(chuàng)建DataSet,并通過DataGrid對(duì)象來顯示數(shù)據(jù),可通過“Windows窗體”工具箱中的控件在當(dāng)前窗體中創(chuàng)建一個(gè)DataGrid對(duì)象和一個(gè)Button對(duì)象
5、。其中,DataGrid對(duì)象的名稱為DataGrid1,然后雙擊按鈕對(duì)象,打開代碼設(shè)計(jì)器,在其事件過程中輸入下面的代碼:Dim ds As New DataSet() SqlDataAdapter1.Fill(ds, "Products") DataGrid1.DataSource = ds保存創(chuàng)建的內(nèi)容后執(zhí)行程序,出現(xiàn)窗體之后,單擊按鈕對(duì)象可以查看相應(yīng)的數(shù)據(jù)。有關(guān)DataSet的創(chuàng)建和顯示將在后面進(jìn)行更加詳細(xì)的介紹。7.7 DataSet DataSet是一個(gè)完整的包含表、約束、表之間關(guān)系的數(shù)據(jù)集合,并讓一個(gè)小的關(guān)系數(shù)據(jù)庫駐留內(nèi)存。它提供了一個(gè)與數(shù)據(jù)源無關(guān)的相容關(guān)系編程模
6、型。DataSet對(duì)象中的每個(gè)表都包含一個(gè)列集合,它們代表了DataSet的模式。每個(gè)表都有多個(gè)行,表示這個(gè)DataSet所保持的數(shù)據(jù)。這些行記得它們的初始狀態(tài)和當(dāng)前狀態(tài),以便DataSet可以跟蹤發(fā)生了何種改變。其類的結(jié)構(gòu)如圖7.14所示:DataSetDataViewDataTableDataColumnDataColumnDataRowDataRelationConstraint圖7.14 DataSet類的結(jié)構(gòu)當(dāng)在一個(gè)企業(yè)解決方案的不同組件間傳遞數(shù)據(jù)時(shí),DataSet提供了一個(gè)豐富的對(duì)象模型。例如,在代表性的解決方案中,一個(gè)客戶應(yīng)用程序通過URL請(qǐng)求數(shù)據(jù)。當(dāng)請(qǐng)求到達(dá)適當(dāng)?shù)闹虚g層組件時(shí),
7、將使用適配器創(chuàng)建一個(gè)DataSet。然后,這個(gè)DataSet被轉(zhuǎn)換為一個(gè)XML文檔,傳送回請(qǐng)求者。在客戶應(yīng)用程序上,使用控件組合來顯示這些數(shù)據(jù),如DataGrid(數(shù)據(jù)網(wǎng)格)。用戶可以對(duì)數(shù)據(jù)進(jìn)行添加、刪除和編輯等操作,直到自己滿意。當(dāng)準(zhǔn)備完畢時(shí),DataSet再一次被轉(zhuǎn)換為XML文檔,傳送回服務(wù)器組件。該組件將XML文檔轉(zhuǎn)換為DataSet,然后使用適配器將改變的數(shù)據(jù)合并回DBMS中。如圖7.15所示。如果發(fā)生任何沖突,服務(wù)器組件可以使用內(nèi)置的商務(wù)規(guī)則對(duì)它們進(jìn)行調(diào)整。經(jīng)過調(diào)整的DataSet返回客戶后可以被合并到現(xiàn)有的DataSet中,用戶可以重新開始使用反映最新版本的DataSet工作。圖
8、7.15 利用DataSet進(jìn)行數(shù)據(jù)傳遞的過程通常有兩種方法來使用DataSet:非類型化數(shù)據(jù)集與類型化數(shù)據(jù)集。非類型化數(shù)據(jù)集沒有相應(yīng)的內(nèi)置架構(gòu)(表和列結(jié)構(gòu))。用戶可以通過DataSet控件或編程來創(chuàng)建一個(gè)DataSet,然后給其添加DataTable對(duì)象,再創(chuàng)建DataRelation對(duì)象將每個(gè)表連接起來。當(dāng)運(yùn)行時(shí)需要?jiǎng)?chuàng)建一個(gè)DataSet來捕獲應(yīng)用程序生成的數(shù)據(jù)時(shí),可以使用編程方法。類型化數(shù)據(jù)集先是從基類 DataSet 派生,然后使用“數(shù)據(jù)集設(shè)計(jì)器”中的信息(存儲(chǔ)在 .xsd 文件中)生成一個(gè)新的強(qiáng)類型數(shù)據(jù)集類。在應(yīng)用程序中既可以使用類型化數(shù)據(jù)集也可以使用非類型化數(shù)據(jù)集。不過,.NET對(duì)
9、類型化數(shù)據(jù)集提供了更多工具支持,而且使用類型化數(shù)據(jù)集進(jìn)行編程不僅更加簡單,而且不易出錯(cuò)。7.7.1 DataSet的結(jié)構(gòu)DataSet的關(guān)系結(jié)構(gòu)和功能是在Tables,Columns,Constraints和Relations集合中進(jìn)行描述。其中,表的布局包括數(shù)據(jù)類型等信息,放在Tables和Columns中,特定表的約束放在Constraints中,表之間的關(guān)系放在Relations中。1DataTableDataTable是包含內(nèi)存中數(shù)據(jù)的一個(gè)表,它有一個(gè)Columns集合,其中包含表的模式。DataTable還包含DataRow對(duì)象的一個(gè)Rows集合,每個(gè)DataRow對(duì)象代表一個(gè)數(shù)據(jù)記
10、錄。2DataColumnDataColumn表示DataTable中一個(gè)字段的模式元素。DataColumn對(duì)象的DataType屬性可以包含列的數(shù)據(jù)類型,列的行為方式可以用AllowNull,Unique和ReadOnly等屬性來設(shè)置。DataColumn可以設(shè)置為新行的列自動(dòng)插入一個(gè)遞增的值,類似于SQLServer的Identity列或Access中的Counter字段。AutoIncrement屬性可以打開這個(gè)功能,AutoIncrementSeed和AutoIncrementStep屬性控制這個(gè)值從哪個(gè)數(shù)開始,以及遞增的方式。大多數(shù)列都包含類似的數(shù)據(jù)值,列也可以設(shè)置為包含一個(gè)表達(dá)式
11、,根據(jù)其他列來計(jì)算一個(gè)值。3DataRow與僅包含模式信息的DataColumn相反,DataRow包含實(shí)際的數(shù)據(jù)值。DataRow類的Item屬性以列名建立索引(從列的DataColumn對(duì)象中提取列名)。如果一個(gè)DataColumn對(duì)象的名稱是FirstName,則對(duì)于DataRow類來說,F(xiàn)irstName列中的值可以用下面的代碼來提?。簊FirstName=MyDataRow.Item("FirstName")Item屬性是DataRow的默認(rèn)屬性,也是一個(gè)索引屬性,因此,可以將其省略。另外,列也可以通過它們的數(shù)字索引來訪問。如果在DataTable中,F(xiàn)irstN
12、ame的DataColumn的數(shù)字索引是4,就可以使用下述代碼:sFirstName=MyDataRow(4)要在DataTable中添加新行,NewRow方法用返回一個(gè)引用該新行的對(duì)象,然后在行中的每個(gè)字段(列)中插入數(shù)據(jù)。NewRow方法會(huì)自動(dòng)在Rows集合中添加新行。要修改行中的數(shù)據(jù),只需訪問列,并設(shè)置其中的值即可。對(duì)于小的應(yīng)用程序來說,這是改變DataTable的最簡單的方式。例如,下面的代碼可以為FirstName列填充數(shù)據(jù):MyDataRow("FirstName")=sFirstNameDataRow類的一個(gè)最重要的功能是可以顯示某一行中數(shù)據(jù)的不同版本。在編輯
13、和提交對(duì)行的改變時(shí),開發(fā)人員可以根據(jù)數(shù)據(jù)的版本來決定如何操作。在DataRow中數(shù)據(jù)的版本可以包括:Current:行上的當(dāng)前數(shù)據(jù),就是最后一次接受或拒絕對(duì)行的改變。Default:行上的源默認(rèn)值,這些值在使用DataTable的NewRow方法創(chuàng)建后就在該行上。Original:當(dāng)表第一次添加到DataSet上時(shí)行中的數(shù)據(jù),或者在DataTable上最后一次執(zhí)行AcceptChanges后行上的數(shù)據(jù)。Proposed:行上有一些沒有使用DataTable的AcceptChanges提交的新數(shù)據(jù),或單個(gè)DataRow上的新數(shù)據(jù)。這些數(shù)據(jù)都可以用DataTable或DataRow的RejectC
14、hanges方法回執(zhí),返回其原來的值。在任何時(shí)候,行中都可以有多個(gè)版本的數(shù)據(jù),即給定的行可以顯示有數(shù)據(jù)的Original版本、Current版本和Proposed版本。對(duì)于行上的一列,每個(gè)版本的值都是使用Item屬性的一個(gè)可選參數(shù)獲得的。例如,要獲得FirstName列的Proposed值,可以使用下面的代碼:sFirstName=MyDataRow("FirstName",DataRowVersion.Proposed)但是,這會(huì)產(chǎn)生一個(gè)錯(cuò)誤,因?yàn)楸徽?qǐng)求的數(shù)據(jù)版本在行上不存在。要知道行上的數(shù)據(jù)有什么可用的版本,可以使用DataRow的HasVersion方法。數(shù)據(jù)的某個(gè)版
15、本不存在的情況非常多。下面的代碼查找一行,看看其中是否有Proposed版本的新數(shù)據(jù)。如果該行的FirstName字段上有Proposed版本的與行上源數(shù)據(jù)不同的新數(shù)據(jù),就接受改變。但如果FirstName中的Proposed數(shù)據(jù)與源數(shù)據(jù)相同,就取消編輯。If MyRow.HasVersion(DataRowVersion.Proposed) ThenIf MyRow ("FirstName", DataRowVersion.Current) = MyRow("FirstName", _DataRowVersion .Proposed) ThenMsgB
16、ox("FirstName is unchanged - edit cancelled")MyRow.CancelEditElseMyRow.AcceptChangesEnd IfElseMsgBox("Row has no proposed data")End If4ConstraintDataTable的Constraints集合包含一組對(duì)象,描述了如何處理DataTable中數(shù)據(jù)的約束。目前有兩個(gè)約束類:ForeignKeyConstraint和UniqueConstraint。其中,F(xiàn)oreignKeyConstraint對(duì)象必須使用下述元素設(shè)置
17、:外鍵所指的相關(guān)DataTable。包含DataTable中的外鍵的列,這個(gè)外鍵包含了約束。如果違背了約束,應(yīng)采取的操作。另一種約束類是UniqueContstraint,它比較簡單,只需要設(shè)置DataTable中的列即可。不過,該列必須包含與UniqueContraint約束相關(guān)的惟一的值。5DataRelationRelations集合中的每個(gè)DataRelation對(duì)象都包含DataSet的Tables集合中兩個(gè)DataTables的鏈接信息。指定每個(gè)表中用于鏈接的列,就可以鏈接DataTables,非常類似于在指定關(guān)系數(shù)據(jù)庫的關(guān)系時(shí)把主鍵和外鍵關(guān)聯(lián)起來。典型的關(guān)系是父子關(guān)系,例如在Sq
18、l Server的事例數(shù)據(jù)庫Northwind中,父Customers表與子Orders表的關(guān)聯(lián)。Customers表中的每一行在Orders表中可以有0個(gè)、一個(gè)或多個(gè)相關(guān)記錄。以下代碼示例使用 DataSet 中的兩個(gè) DataTable 對(duì)象來創(chuàng)建一個(gè) DataRelation。每個(gè) DataTable 包含一個(gè)名為 CustID 的列,它必須有相同的數(shù)據(jù)類型。用作兩個(gè) DataTable 對(duì)象之間的鏈接。該示例將單個(gè) DataRelation 添加到 DataSet 的 Relations 集合中。該示例中的第一個(gè)參數(shù)指定所創(chuàng)建的 DataRelation 的名稱。第二個(gè)參數(shù)設(shè)置父 Da
19、taColumn,第三個(gè)參數(shù)設(shè)置子 DataColumn。customerOrders.Relations.Add("CustOrders",customerOrders.Tables("Customers").Columns("CustID"), customerOrders.Tables("Orders").Columns("CustID")7.7.2 DataSet的創(chuàng)建1非類型化數(shù)據(jù)集創(chuàng)建非類型化數(shù)據(jù)集,完全不依賴于任何數(shù)據(jù)庫服務(wù)器。既可以通過工具箱中的DataSet控件來可視化地創(chuàng)建D
20、ataSet。也可以編碼創(chuàng)建DataSet。如果通過手工編碼來創(chuàng)建非類型化數(shù)據(jù)集,可以直接將代碼輸入到代碼設(shè)計(jì)器中。例如,下面的代碼創(chuàng)建了一個(gè)簡單的DataSet,在其中添加一個(gè)表,然后在表中添加兩個(gè)列:'創(chuàng)建一個(gè)DataSet對(duì)象Dim MyDataSet As New DataSet(ManualDataSet)'創(chuàng)建一個(gè) DataTable 并添加到 DataSet 中Dim tblDataTable As New DataTable("SampleTable")MyDataSet.Tables.Add(tblDataTable)'為表創(chuàng)建兩個(gè)
21、 column 并建立它們的屬性,然后將屬性添加到 Columns 集合中Dim colDataColumn1 As New DataColumn("FirstColumn")colDataColumn1.DataType = System.Type.GetType("System.String")colDataColumn1.DefaultValue = "Default"tblDataTable.Columns.Add(colDataColumn1)Dim colDataColumn2 As New DataColumn(&quo
22、t;SecondColumn")colDataColumn2.DataType = System.Type.GetType("System.Int32")tblDataTable.Columns.Add(colDataColumn2)'創(chuàng)建一個(gè) DataRow 并添加到表中,然后設(shè)置它的屬性Dim rowMyDataRow As DataRowrowMyDataRow = MyDataSet.Tables("SampleTable").NewRowMyDataSet.Tables("SampleTable").Row
23、s.Add(rowMyDataRow)rowMyDataRow("FirstColumn") = "New text"rowMyDataRow("SecondColumn") = 10000MyDataSet.AcceptChanges()'遍歷各行并顯示對(duì)應(yīng)的值Dim rowDataRow As DataRowFor Each rowDataRow In MyDataSet.Tables("SampleTable").RowsMsgBox(rowDataRow.Item("FirstColumn
24、").ToString & "-" & CStr(rowDataRow _("SecondColumn"),"Show data")Next從注釋中可以看出,上面這段代碼開始時(shí)創(chuàng)建一個(gè)新DataSet,其名稱是ManualDataSet,再創(chuàng)建一個(gè)新DataTable,名稱是SampleTable,并把它添加到DataSet中。此時(shí)表中沒有任何列。接下來,為DataTable創(chuàng)建兩個(gè)列,并設(shè)置它們的屬性。給第一列設(shè)置的Default實(shí)際上是可選的,但可以作為一個(gè)例子包含進(jìn)去。實(shí)際上,必須為列設(shè)置的惟一屬性是D
25、ataType。創(chuàng)建和初始化每個(gè)列后,就把它們添加到名為SampleTable的DataTable的Columns集合中。在創(chuàng)建一個(gè)DataRow之后,利用For語句遍歷Rows集合并顯示每行上兩個(gè)列的值。如果運(yùn)行這段代碼,結(jié)果應(yīng)是在一個(gè)消息框中顯示Newtext10000字符串。這樣,就可以對(duì)DataSet進(jìn)行任何操作。2創(chuàng)建類型化數(shù)據(jù)集需要在程序運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建DataSet的時(shí)候,使用手工編碼的方式是非常方便的。但是這種方式只適合具有少量數(shù)據(jù)的DataSet,如果需要處理大量數(shù)據(jù),只能通過數(shù)據(jù)庫來創(chuàng)建DataSet。從前面的內(nèi)容可以知道,VB.NET通過管理支持程序和對(duì)應(yīng)的幾個(gè)對(duì)象以及控件
26、,使用戶能夠可視化地通過數(shù)據(jù)庫來創(chuàng)建DataSet,不必被繁雜的代碼或設(shè)置所困擾。(1)利用“數(shù)據(jù)”工具箱中的Connection控件創(chuàng)建一個(gè)數(shù)據(jù)庫連接,例如選擇SqlConnection控件,創(chuàng)建一個(gè)SQL數(shù)據(jù)庫連接。(2)利用新建的SQL數(shù)據(jù)庫連接創(chuàng)建一個(gè)SqlDataAdapter對(duì)象(名稱為SqlDataAdapter1),并配置適配器,選擇需要的數(shù)據(jù)表和查詢語句。(3)在SqlDataAdapter1控件上的“SqlDataAdapter任務(wù)”窗口中,單擊“生成數(shù)據(jù)集”超級(jí)鏈接,可打開“生成數(shù)據(jù)集”對(duì)話框,如圖7.21所示。如果數(shù)據(jù)庫需要用戶賬號(hào),在此操作中還會(huì)打開一個(gè)對(duì)話框要求輸入
27、用戶賬號(hào)和密碼,才允許訪問數(shù)據(jù)庫并生成數(shù)據(jù)集。(4)選擇“新建”單選按鈕,并在其后的文本框中輸入新的DataSet的名稱,例如,DataSet1。然后在“選擇要添加到數(shù)據(jù)集中的表”列表框中啟用要添加到DataSet中的表。如果要將新建的數(shù)據(jù)集添加到設(shè)計(jì)器中,可啟用“將此數(shù)據(jù)集添加到設(shè)計(jì)器”復(fù)選框,然后單擊“確定”按鈕即完成DataSet的創(chuàng)建。通過數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)集之后,打開數(shù)據(jù)集的“屬性”窗口,如圖7.22所示。通過該屬性窗口可以設(shè)置DataSet的一些常用屬性,并可以查看DataSet的構(gòu)架和詳細(xì)屬性。如果要查看DataSet的構(gòu)架,單擊“查看構(gòu)架”超級(jí)鏈接,可打開DataSet的構(gòu)架文件(
28、擴(kuò)展名為.xsd,例如DataSet1.xsd)來顯示構(gòu)架。 7.7.3 DataSet的數(shù)據(jù)預(yù)覽通過數(shù)據(jù)庫創(chuàng)建DataSet之后,就可以供應(yīng)用程序處理和顯示。不過,為了保證數(shù)據(jù)庫連接和DataSet生成的正確性,VB.NET提供了DataSet的預(yù)覽功能。通過它,開發(fā)人員可以在使用DataSet之前預(yù)覽DataSet中的內(nèi)容。要預(yù)覽通過數(shù)據(jù)庫生成的DataSet,可打開當(dāng)前窗體的快捷菜單或DataAdapter對(duì)象的“SqlDataAdapter任務(wù)”窗口,然后單擊“預(yù)覽數(shù)據(jù)”超級(jí)鏈接,可打開“數(shù)據(jù)適配器預(yù)覽”對(duì)話框,如圖7.23所示。通過該對(duì)話框,可以預(yù)覽當(dāng)前應(yīng)用程序中的所有數(shù)據(jù)適配器(D
29、ataSetCommand對(duì)象)中的DataSet及其具體內(nèi)容。如果“結(jié)果”列表框中顯示的內(nèi)容沒有問題,則DataSet對(duì)象被正確地創(chuàng)建。7.8 DataView的使用DataView對(duì)象類似于SQL Server數(shù)據(jù)庫中的視圖功能,提供對(duì)DataTable的檢視、列排序、過濾記錄以及記錄的搜索。DataView對(duì)象常常被Windows窗體或Web窗體控件數(shù)據(jù)綁定(DataBinding),而且能夠在不同的控件中同時(shí)提供同一數(shù)據(jù)的多個(gè)視圖。DataView的使用,增加了ADO.NET在數(shù)據(jù)應(yīng)用上的靈活性。為指定的DataTable創(chuàng)建一個(gè)新的DataView,可以聲明該DataView,并把D
30、ataTable的一個(gè)引用傳送給DataView構(gòu)造函數(shù),代碼如下:Dim MyNewDataView As New DataView(MyDataSet.Tables("Customers")在第一次創(chuàng)建DataView時(shí),DataView默認(rèn)為DataSet中的所有行。利用屬性可以在DataView中得到數(shù)據(jù)行的一個(gè)子集,或者給這些行排序。這些屬性可以隨時(shí)修改,動(dòng)態(tài)改變DataSet的輸出。7.8.1取得DefaultView屬性在DataSet中,DataTable提供了一個(gè)DefaultView屬性,該屬性可以獲取包括排序、篩選和搜索等自定義的視圖。例如下面的代碼:
31、Dim dv As New DataView()SqlDataAdapter1.Fill(DataSet11, "Products") dv = DataSet11.Tables("Products").DefaultView DataGrid1.DataSource = dv上面的代碼先創(chuàng)建一個(gè)名為dv的DataView對(duì)象,然后從DataSet11中取得Products,并通過DefaultView將內(nèi)容返回給默認(rèn)的DataView,最后,通過DataGrid1控件來接收并顯示數(shù)據(jù)。7.8.2 條件過濾要通過條件過濾來獲取數(shù)據(jù)的子集,一般利用Data
32、View的RowFilter和RowStateFilter屬性來實(shí)現(xiàn)。RowFilter屬性用于提供過濾表達(dá)式,例如下面的代碼可以取出FirstName列為Anny的記錄:MyNewDataView.RowFilter="FirstName='Anny'"如果要進(jìn)行模糊條件設(shè)置,可使用Like、*和%等字符。例如,在為Customers表定義的DataView中,可以把DataView設(shè)置為只返回公司名以字母A開頭的客戶,代碼如下:MyNewDataView.RowFilter= "CompanyName Like 'A*' &qu
33、ot;RowFilter表達(dá)式可以非常復(fù)雜,也可以包含涉及多個(gè)行的數(shù)據(jù)、常數(shù)的算術(shù)計(jì)算和比較。例如,可以在過濾條件中使用and和or等操作數(shù)。RowStateFilter屬性與RowFilter屬性有所不同,它定義了從DataTable中提取特定DataSet的值,表7.6所示為RowStateFilter可用的值及其說明。RowStateFilter的值可以以各種形式合并使用,方法是在設(shè)置RowStateFilter屬性時(shí)把它們加在一起。例如,下面的代碼就讓DataView只顯示新行和已刪除的行:MyNewDataView.RowStateFilter=DataViewRowState.Ne
34、w+DataViewRowState.Deleted表7.6 RowStateFilter 可用的值設(shè) 置說 明CurrentRows顯示當(dāng)前行,包括未改變的行、新行和已修改的行當(dāng)前行,但不顯示已刪除的行Deleted顯示已刪除的行。注意,如果使用了DataTable或DataView的Delete方法刪除了某一行,該行才被認(rèn)為已刪除。從Rows集合中刪除行,不會(huì)把這些行標(biāo)記為已刪除。ModifiedCurrent顯示帶有當(dāng)前版本的數(shù)據(jù)的行,這些數(shù)據(jù)不同于該行中的原數(shù)據(jù)ModifiedOriginal顯示已修改的行,但顯示數(shù)據(jù)的原版本(即使數(shù)據(jù)行已被改變,其中已有另一個(gè)當(dāng)前版本的數(shù)據(jù),也是這樣
35、)。注意,這些行中當(dāng)前版本的數(shù)據(jù)可以用ModifiedCurrent設(shè)置來提取New顯示新行,這些行是用DataView的AddNew方法添加的None不顯示任何行,在用戶選擇顯示選項(xiàng)前,可以使用這個(gè)設(shè)置來初始化控件的DataViewOriginalRows顯示所有帶有源數(shù)據(jù)版本的行,包括未改變的行和已刪除的行Unchanged顯示未修改的行7.8.3 列排序DataView的Sort屬性帶一個(gè)描述排序的字符串,可以在一個(gè)或多個(gè)列上進(jìn)行排序,每個(gè)列可以按升序或降序來排列。指定排序的字符串應(yīng)包含一個(gè)列名,后面可以有表示升序的ASC或表示降序的DESC,默認(rèn)是升序。對(duì)于多列排序,該字符串應(yīng)在第一個(gè)
36、列名后有一個(gè)逗號(hào),其后是另一個(gè)列名和ASC或DESC。其中,列的個(gè)數(shù)可以按需要確定。例如,下面的代碼先按單價(jià)(unitPrice)對(duì)DataView中的行進(jìn)行升序排序,然后在給定的相同單價(jià)中,再按照庫存量(Stocks)進(jìn)行降序排序。MyNewDataView.Sort="unitPrice ASC , Stocks DESC"7.8.4 使用DataView控件在“數(shù)據(jù)”工具箱中,有一個(gè)DataView控件。通過它,開發(fā)人員可以快速地創(chuàng)建DataView對(duì)象,并可視化地設(shè)置過濾條件、排序方式和要操作的表等屬性。在DataView控件的“屬性”對(duì)話框中,有8個(gè)常用屬性,它們
37、的設(shè)置說明如表7.7所示。表7.7 DataView控件的常用屬性屬 性說 明AllowDelete設(shè)置當(dāng)前DataView,以及與之關(guān)聯(lián)的用戶界面是否允許刪除AllowEdit設(shè)置當(dāng)前DataView,以及與之關(guān)聯(lián)的用戶界面是否允許編輯AllowNew設(shè)置當(dāng)前DataView,以及與之關(guān)聯(lián)的用戶界面是否允許添加新行ApplyDefaultSort設(shè)置是否應(yīng)用默認(rèn)的排序方式RowFilter設(shè)置用于篩選當(dāng)前DataView返回的數(shù)據(jù)的表達(dá)式RowStateFiler設(shè)置當(dāng)前DataView返回的數(shù)據(jù)的版本Sort設(shè)置當(dāng)前DataView返回?cái)?shù)據(jù)的排序方式Table設(shè)置當(dāng)前DataView要返回
38、數(shù)據(jù)的DataSet的表(當(dāng)前應(yīng)用程序中的所有DataSet及其表都列在該屬性后面的下拉列表框中)7.9 控件與數(shù)據(jù)綁定利用ADO.NET連接數(shù)據(jù)庫并創(chuàng)建DataSet,主要是為了顯示和操作數(shù)據(jù)庫中的數(shù)據(jù)。要在應(yīng)用程序中實(shí)現(xiàn)數(shù)據(jù)的顯示和操作,則必須將數(shù)據(jù)與窗體中的控件綁定起來,通過控件來顯示和處理數(shù)據(jù)。VB.NET中的控件有多種,有些控件一次可以顯示一條記錄的一列,例如TextBox和Label等。對(duì)于它們的數(shù)據(jù)綁定是簡單的控件數(shù)據(jù)綁定,利用Bindings集合來指定綁定的屬性、數(shù)據(jù)來源和列。另外一些控件可以顯示多條記錄,例如DataGrid,ListBox和ComboBox等控件。對(duì)于它們的
39、數(shù)據(jù)綁定是復(fù)雜的控件數(shù)據(jù)綁定,利用DataSource屬性來指定數(shù)據(jù)源。7.9.1 簡單的數(shù)據(jù)綁定對(duì)于TextBox和Label等控件,一次只能顯示出一個(gè)記錄的一列。如果需要他們來顯示和處理數(shù)據(jù),就只能使用Bindings進(jìn)行簡單數(shù)據(jù)綁定。綁定時(shí)一個(gè)集合對(duì)象代表一個(gè)控件的多個(gè)屬性,可以與不同數(shù)據(jù)來源的列綁定。不過,要注意列與屬性的特征是否相符合。簡單數(shù)據(jù)綁定的語法如下:控件.Bindings.Add("Property",DataSource,"DataMember")在上面的參數(shù)中,Property(屬性)可以設(shè)置控件的任何屬性,如Text,DataSource(數(shù)據(jù)源)是指DataTable,DataView,DataSet或者一組數(shù)組變量,DataMember(數(shù)據(jù)成員)用來設(shè)置某
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)心理健康教育課件微笑訓(xùn)練營
- 物業(yè)公司門衛(wèi)協(xié)議
- 政府部門信息保密制度
- 郵政快遞公務(wù)員聘用合同樣本
- 建筑材料采購招投標(biāo)注意事項(xiàng)
- 文化傳媒公司參觀管理辦法
- 2024年精裝房屋合同
- 2025年春學(xué)期《春》一課德育融入探討
- 2024拆遷安置項(xiàng)目土石方運(yùn)輸合同
- 二零二五年度2025版無孩離婚協(xié)議書子女監(jiān)護(hù)權(quán)與財(cái)產(chǎn)分割細(xì)則17篇
- GB/T 42449-2023系統(tǒng)與軟件工程功能規(guī)模測量IFPUG方法
- 酒店裝修工程預(yù)算表EXCEL模板(推薦)
- NY 5052-2001無公害食品海水養(yǎng)殖用水水質(zhì)
- 【講座】2020年福建省高職分類考試招生指導(dǎo)講座
- 性格決定命運(yùn)課件
- 學(xué)習(xí)會(huì)計(jì)基礎(chǔ)工作規(guī)范課件
- 雙面埋弧焊螺旋鋼管公稱外公壁厚和每米理論重量
- 富士施樂VC2265打印機(jī)使用說明SPO
- 服務(wù)態(tài)度決定客戶滿意度試題含答案
- 教科版四年級(jí)科學(xué)上冊(cè)全冊(cè)復(fù)習(xí)教學(xué)設(shè)計(jì)及知識(shí)點(diǎn)整理
- 重慶萬科渠道制度管理辦法2022
評(píng)論
0/150
提交評(píng)論