下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)綁定最簡(jiǎn)單的綁定首先還是打開(kāi)我們的示例文件專(zhuān)業(yè)報(bào)表.Table”,然后在命令窗口執(zhí)行下面的代碼:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables(" 訂單")'將 rt 綁定到訂單表rt.Text= "Fields!產(chǎn)品.Value"'設(shè)置打印字段doc.body.Children.Add(rt)doc.Preview()上述代碼會(huì)打印出訂單表中每一行的產(chǎn)品名稱(chēng)。DataBinding用于設(shè)置打印對(duì)象的綁定
2、屬性,該屬性包括一些子屬性,DataSource表示數(shù)據(jù)來(lái)源,數(shù)據(jù)來(lái)源可以是Table,還可以是數(shù)組或者集合。需要注意的是,不能直接綁定到 Table,如果要綁定到 Table,必須用BindTables來(lái)設(shè)置, 例如: rt.DataBinding.DataSource = BindTables(" 訂單") 如果對(duì)象的內(nèi)容來(lái)自于某一列,其Text屬性的設(shè)置格式如下:Fields!列名稱(chēng).Value使用表達(dá)式在命令窗口執(zhí)行下面的代碼:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.Data
3、Source = BindTables(" 訂單")'將 rt 綁定到訂單表rt.Text= "Math.Round(Fields!金額.Value,1)"'設(shè)置打印表達(dá)式doc.body.Children.Add(rt)doc.Preview()留意方括號(hào)中的內(nèi)容:Math.Round(Fields!金額.Value,1)意思是打印的時(shí)候?qū)⒔痤~列的內(nèi)容,保留一位小數(shù),你可以在Text屬性中使用Foxtable支持的所有函數(shù)。 注意表達(dá)式必須用方括號(hào)括起來(lái)。日期的打印為了得到常規(guī)的日期格式,可以利用 Format格式化日期數(shù)據(jù):Dim d
4、oc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables(" 訂單")'將 rt 綁定到訂單表rt.Text= "Format(Fields!日期.Value,""yyyy-MM-dd"")"doc.body.Children.Add(rt)doc.Preview()要記得對(duì)于字符串中的每一個(gè)雙引號(hào),都必須用兩個(gè)雙引號(hào)來(lái)表示。在命令窗口執(zhí)行下面的代碼:綁定多個(gè)字段為了打印出訂單表中的日期和數(shù)量,在
5、命令窗口執(zhí)行下面的代碼:需要使用容器(RenderArea),將原來(lái)的打印對(duì)象加入到容器中,這些打印對(duì)象不再需要設(shè)置 綁定,只需為容器設(shè)置綁定即可。例如:Dim doc As New PrintDocDim rt As New prt.RenderTextDim ra As New prt.RenderAreara.Style.Spacing.Bottom = 2ra.DataBinding.DataSource = BindTables(" 訂單")'將容器綁定到訂單表rt.Text = "Fields!日期.Value"ra.Children
6、.Add(rt)'將打印對(duì)象添加到容器中rt = New prt.RenderTextrt.Text= "Fields!數(shù)量.Value"ra.Children.Add(rt)doc.body.Children.Add(ra)doc.Preview()上述的代碼將依次打印每一個(gè)訂單的日期和數(shù)量。打印標(biāo)簽有了綁定,打印標(biāo)簽比以前更簡(jiǎn)單。示例Dim doc As New PrintDoc ' 定義一個(gè)報(bào)表Doc.Stacking = prt.StackingRulesEnum.InlineLeftToRightDim ra As New prt.RenderAr
7、eaDim rt As prt.RenderTextra.Width = 40 '設(shè)置標(biāo)簽寬度ra.SplitHorzBehavior = prt.SplitBehaviorEnum.Never ' 禁止水平分割ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never '禁止垂直分割ra.Style.Spacing.Right = 2 '設(shè)置標(biāo)簽之間的所有和上下間隔為2毫米ra.Style.Spacing.Bottom = 2ra.Style.Padding.All = 1 ' 標(biāo)簽內(nèi)容距離邊框?yàn)?毫米ra.S
8、tyle.Borders.All = New prt.Linedef(0.3, Color.Red)'設(shè)置邊框ra.DataBinding.DataSource = BindTables(" 員工")將容器綁定到員工表Doc.Body.ChildRen.Add(ra)'將容器加入到報(bào)表中rt = New prt.RenderTextrt.Text ="姓名:Fields!姓名.Value"ra.Children.Add(rt)'添加到容器中rt = New prt.RenderTextrt.Text ="部門(mén):Field
9、s!部門(mén).Value"ra.Children.Add(rt)'添加到容器中rt = New prt.RenderTextrt.Text ="職務(wù):Fields!職務(wù).Value"ra.Children.Add(rt)'添加到容器中Doc.Preview()'預(yù)覽報(bào)表表格與綁定行組也可以設(shè)置綁定,這樣我們可以很方便地將一個(gè)表格綁定到數(shù)據(jù)表。例如,打印訂單表中的某些列,代碼非常簡(jiǎn)單:Dim doc As New PrintDocDim rt As New prt.RenderTableDim tb as Table = Tables("
10、;訂單")Dim ColNames As String() = New String()" 產(chǎn)品","客戶","單價(jià)","數(shù)量","金額"For c As integer = 0 To ColNames.Length -1rt.Cells(0,c).Text = ColNames(c)rt.Cols(c).Width = tb.Cols(ColNames(c).PrintWidthrt.Cells(1, c).Text = "Fields!" & ColNa
11、mes(c) & ".Value"' 設(shè)置綁定表達(dá)式Nextrt.RowGroups(0,1).Style.TextAlignVert = prt.AlignVertEnum.Center '第一行內(nèi)容垂直居中rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All '將第一行作為表頭。rt.RowGroups(1,1).DataBinding.DataSource = BindTables(" 訂單")'將第二行綁定到訂單表doc.Body.Children.Add(r
12、t)doc.Preview()注意這一行代碼:rt.RowGroups(1,1).DataBinding.DataSource = BindTables(" 訂單")'將第二行綁定到訂單表該行代碼將表格的第二行綁定到訂單表,這樣第二行將根據(jù)訂單表中的每一行數(shù)據(jù),自動(dòng)生成副本,完成整個(gè)表格的打印。FOXtable編程基本概念DataTable 和 TableFoxtable中有一個(gè)集合 DataTables ,通過(guò)該集合可以獲得指定名稱(chēng)的表,例如:DataTables("產(chǎn)品")'產(chǎn)品表DataTables("客戶")客
13、戶表DataTables("訂單")'訂單表實(shí)際上你是看不到 DataTable的,你看到的是 Table ,也就是說(shuō),上面的三個(gè)圖,實(shí)際上就是三個(gè)Table。那么什么是Table呢?你可以這樣理解,DataTable就像一個(gè)倉(cāng)庫(kù),所有從數(shù)據(jù)文件中加載的數(shù)據(jù),都存放在這里,而且這個(gè)倉(cāng)庫(kù)是不直接面對(duì)用戶的;而 Table就像一個(gè)展廳,是負(fù) 責(zé)和用戶打交道的,這個(gè)展廳(Table)從倉(cāng)庫(kù)(DataTable)中取得數(shù)據(jù),并呈現(xiàn)給用戶。同樣,F(xiàn)oxtable中也有一個(gè)集合 Tables ,通過(guò)該集合可以獲得指定名稱(chēng)的Table ,在沒(méi)有建立關(guān)聯(lián)的情況下,我們這個(gè)簡(jiǎn)化的訂單
14、管理系統(tǒng)包括三個(gè)Table,分別是:Tables("產(chǎn)品") Tables("客戶") Tables("訂單")在初始的,f#況下,Table會(huì)從DataTable中提取所有數(shù)據(jù)呈現(xiàn)給用戶,如果你設(shè)置了篩選條 件,Table就會(huì)從DataTable提取符合篩選條件的數(shù)據(jù),然后呈現(xiàn)給用戶。例如訂單表有1000行數(shù)據(jù),那么DataTables("訂單”)從頭到尾,始終都會(huì)有1000行數(shù)據(jù),不受篩選的影響。而 Tables("訂單")卻不一樣,如果沒(méi)有進(jìn)行篩選,那么Tables("訂單")也
15、會(huì)包括所有數(shù)據(jù),也就是1000行數(shù)據(jù)全部可見(jiàn)。如果現(xiàn)在從中篩選出產(chǎn)品為PD01的訂單,且PD01的訂單是200個(gè),那么經(jīng)過(guò)篩選后,Tables("訂單”)會(huì)包括200行數(shù)據(jù),也就是你看 到的那200個(gè)產(chǎn)品為PD01的訂單。所以關(guān)于DataTable和Table的關(guān)系,較為完整的描述是:從數(shù)據(jù)文件加載到 Foxtable中的數(shù)據(jù),是存放在DataTable中的,它就像一個(gè)倉(cāng)庫(kù),不直接 面對(duì)用戶;而Table就像一個(gè)展廳,是負(fù)責(zé)和用戶打交道的,它根據(jù)指令從倉(cāng)庫(kù)(DataTable)中提取符合條件的數(shù)據(jù),然后呈現(xiàn)給用戶;通過(guò)菜單進(jìn)行的日常數(shù)據(jù)管理工作,例如增加行、刪除行、排序、篩選、匯總等
16、等,都是在 Table中進(jìn)行的;除了編程,用戶沒(méi)有辦法直接對(duì) DataTable進(jìn)行操作,因?yàn)樗遣豢梢?jiàn)的。在任何時(shí)候,DataTable都包括所有已經(jīng)加載的行。Table中的行,既可以排序,也可以篩選,所有 Table中行的數(shù)量和順序都是可變化的,我 們平時(shí)所看到的、所操作的,都是 Table中的行。我們?cè)赥able中進(jìn)行的任何操作,最終都會(huì)反映到DataTable ,例如我們通過(guò)菜單在Table中刪除行,DataTable也會(huì)刪除一行。關(guān)聯(lián)表和Table定在上面這個(gè)簡(jiǎn)化的訂單管理系統(tǒng)中,我們建立如下兩個(gè)關(guān)聯(lián):父表關(guān)聯(lián)列產(chǎn)品訂單產(chǎn)品編號(hào)客戶訂單客戶編號(hào)因?yàn)殛P(guān)聯(lián)的建立,DataTable和Ta
17、ble不再是一一對(duì)應(yīng)的關(guān)系,例如我選擇產(chǎn)品表的時(shí)候,就會(huì)出現(xiàn)三個(gè)Table ,分別是:三個(gè)Table的作用為:Tables("產(chǎn)品"):主表,用于顯示所有產(chǎn)品Tables("產(chǎn)品訂單)如果在Tables("產(chǎn)品。中選定一個(gè)產(chǎn)品,這里會(huì)顯示該產(chǎn)品的全部訂單。Tables("產(chǎn)品訂單.客戶"):如果在Tables("產(chǎn)品.訂單。中選定一個(gè)訂單,這里會(huì)顯示該訂單所 屬的客戶。同樣在選擇客戶表的時(shí)候,也會(huì)出現(xiàn)三個(gè)Table:Tables("客戶")Tables("客戶訂單")Tables(&q
18、uot;客戶.訂單.產(chǎn)品")而選擇訂單表,出現(xiàn)的三個(gè)Table為:Tables("訂單")Tables("訂單.產(chǎn)品")Tables("訂單.客戶”)由此我們可以看出,同一個(gè) DataTable可以有多個(gè) Table,例如下面三個(gè) Table:Tables("產(chǎn)品")Tables("訂單.產(chǎn)品")Tables("客戶.訂單.產(chǎn)品")它們的數(shù)據(jù)全部來(lái)自于DataTables("產(chǎn)品”)。由此可見(jiàn),DataTable的數(shù)量是固定的,而 Table的數(shù)量會(huì)隨著關(guān)聯(lián)的增加而
19、增加,同一個(gè)DataTable可以有多個(gè)Table ,每個(gè)Table都各取所需地從 DataTable中提取數(shù)據(jù)呈現(xiàn)給用戶。DataTable 概述通過(guò)DataTables集合,可以獲得指定名稱(chēng)的DataTable(表)。例如:Dim dt As DataTabledt = DataTables("訂單")DataCol 表示 DataTable 中的列。通過(guò)DataCols集合,可以獲得指定名稱(chēng)的DataCol",例如:Dim dt As DataTable = DataTables(" 訂單")Dim dc As DataCol = dt.
20、DataCols(" 日期")DataRow 表示 DataTable 中的行。通過(guò)DataRows集合,可以獲得某一位置的DataRow(行)。例如:Dim dr As DataRowdr = DataTables("訂單").DataRows(0)行是從。開(kāi)始編號(hào)的,所以0表示第一行,1表示第二行。通過(guò)列名稱(chēng),我們可以得到或設(shè)置某一行指定列的內(nèi)容。例如:Dim r As DataRowDim v As Doubler = DataTables("訂單").DataRows(0)r("數(shù)量")=100v = r(
21、"折扣")由此可知,DataTable、DataRow、DataCol構(gòu)成了表、行、列這樣一個(gè)完整的結(jié)構(gòu)體系,接 下來(lái)我們具體介紹這三個(gè)對(duì)象。DataTable常用屬性通過(guò)DataTables集合,可以獲得指定名稱(chēng)的DataTable(表)。例如:Dim dt As DataTabledt = DataTables("訂單")如果要禁止編輯某個(gè)DataTable,只需將其 AllowEdit屬性設(shè)為False,例如:DataTables("訂單").AllowEdit = False在命令窗口執(zhí)行上述代碼,你會(huì)發(fā)現(xiàn)訂單表的左上角出現(xiàn)一
22、個(gè)鎖形標(biāo)記,表示此表已經(jīng)被鎖定,不能在其中輸入數(shù)據(jù)。如果你要取消鎖定表,只需將其AllowEdit屬性重新設(shè)為T(mén)rue:DataTables("訂單").AllowEdit = True卜表列出了 DataTable的常用設(shè)置屬性,它們的用法和 AllowEdit屬性完全一樣:屬性名說(shuō)明AllowEdit是否允許修改表中數(shù)據(jù)AllowAddNew是否允許增加行AllowClipBoard是否允許復(fù)制粘貼數(shù)據(jù)AllowInitialize是否允許初始化此表AutoAddNew是否允許自動(dòng)增加行,也就是在最舟-行的最舟-個(gè)單兀格按回車(chē)鍵時(shí), 是否自動(dòng)增加一行AllowDelet
23、e是否允許刪除行AllowLockRow是否允許鎖定行AllowUnlockRow是否允許取消鎖定行我們?cè)诰庉嫈?shù)據(jù)的時(shí)候,如果按回車(chē)鍵或Tab鍵,光標(biāo)會(huì)向右移到下一單元格,通過(guò)下面的屬性,你可以改變這種默認(rèn)的光標(biāo)移動(dòng)方式:屬性名說(shuō)明EnterKeyActionDown按回車(chē)鍵是否向下移到另一單兀格TabKeyActionDown按Tab鍵是否向卜移到另一單兀格例如你希望按回車(chē)鍵向下移動(dòng)光標(biāo),而不是向右移動(dòng),只需將 EnterKeyActionDown屬性設(shè)為T(mén)rue即可:DataTables("訂單").EnterKeyActionDown = True最后三個(gè)常用的屬性為
24、:屬性名說(shuō)明Name返回DataTable的名稱(chēng)返回一個(gè)整數(shù),表不 DataTable的類(lèi)型:|Type1內(nèi)部數(shù)據(jù)表2內(nèi)部查詢表3外部數(shù)據(jù)表J4外部查詢表5臨時(shí)表HasChanges邏輯型,判斷 DataTable的數(shù)據(jù)是否已經(jīng)被修改例如執(zhí)行下面的代碼,將列出所有已經(jīng)修改過(guò)的DataTable :Output.Show("已經(jīng)修改的數(shù)據(jù)表:”)For Each dt As DataTable In DataTablesIf dt.Type = 1 Orelse dt.Type = 3 ThenIf dt.HasChanges ThenOutput.Show(dt.Name)End I
25、fEnd IfNextDataTable常用方法AddNew在DataTable中增加一行或多行,并返回所增加的第一行。AddNew()AddNew(Count)Count:可選參數(shù),要增加的行數(shù),如果省略,則只增加一行。例如:Dim dr As DataRowdr = DataTables("訂單").AddNew()dr("日期")=Date.Today '將新增行的日期設(shè)為當(dāng)天日期。其實(shí)我們很少直接向DataTable增加行,更多的時(shí)候,我們是向Table中增加行,原因以后會(huì)講述。Save保存數(shù)據(jù)。語(yǔ)法:Save()Save(Setting
26、)Setting:可選參數(shù),是否保存設(shè)置。例如單單保存數(shù)據(jù):DataTables("訂單").Save()同時(shí)保存數(shù)據(jù)和設(shè)置:DataTables("訂單").Save(True)保存設(shè)置比較耗時(shí),會(huì)影響保存速度。菜單中的保存命令是同時(shí)保存數(shù)據(jù)和設(shè)置的。如果你學(xué)會(huì)了設(shè)計(jì)菜單或窗口,你可以自己設(shè)計(jì)一個(gè)保存按鈕,將其代碼設(shè)為:For Each dt As DataTable In DataTablesdt.Save()Next這樣單擊這個(gè)按鈕就能保存所有表,但是不會(huì)保存設(shè)置;對(duì)于一個(gè)成熟的、已經(jīng)交付使用的項(xiàng)目,有時(shí)是沒(méi)有必要保存設(shè)置的。GetValues從指
27、定列中,獲取不重復(fù)的值,以 集合的形式返回。語(yǔ)法:GetValues(ColumnName,Filter,Sort)ColumnName :列名稱(chēng),從此列中提取不重復(fù)的值。Filter:可選參數(shù),指定一個(gè)條件表達(dá)式,只返回符合此條件的值;請(qǐng)參考表達(dá)式的運(yùn)算符和函數(shù)和條件表達(dá)式 Sort:可選參數(shù),指定排序列,如果省略,則根據(jù)取值列排序,通常無(wú)需設(shè)置。示例一 列出產(chǎn)品表中所有的產(chǎn)品名稱(chēng): Dim Products As List(Of String)Products = DataTables("產(chǎn)品").GetValues("產(chǎn)品名稱(chēng)")For Each
28、Product As String In Products Output.Show(Product)Next示例二返回的值默認(rèn)按照取值列排序,我們可以另外指定排序列;例如按產(chǎn)品編號(hào)順序,列出產(chǎn)品表中所有的產(chǎn)品名稱(chēng):Dim Products As List(Of String)Products = DataTables("產(chǎn)品").GetValues("產(chǎn)品名稱(chēng)","","產(chǎn)品編號(hào)")For Each Product As String In Products Output.Show(Product)Next示例三給
29、排序列加上 DESC關(guān)鍵詞,返回值可以降序排序,例如按最近一次訂貨的日期順序,列出 訂單表中的客戶名單:Dim Customers As List(Of String)Customers = DataTables("訂單").GetValues("客戶","","日期 Desc")For Each Customer As String In Customers Output.Show(Customer)Next示例四可以設(shè)置取值條件,列出產(chǎn)品表中單價(jià)大于100的產(chǎn)品:Dim Products As List(Of
30、String)Products = DataTables("產(chǎn)品").GetValues("產(chǎn)品名稱(chēng)","單價(jià) > 100")For Each Product As String In Products Output.Show(Product)Next示例五可以同時(shí)設(shè)置取值條件和排序列,例如按日期順序,列出 2012年6月1日后訂購(gòu)過(guò)PD01 產(chǎn)品的客戶名單:Dim Customers As List(Of String)Customers = DataTables("訂單").GetValues("
31、;客戶","產(chǎn)品尸'PD01' And 日期 #6/1/2012#","日期")For Each Customer As String In CustomersOutput.Show(Customer)Next示例六下面這個(gè)例子,一般用戶客戶忽略??梢酝瑫r(shí)從多列提取不重復(fù)的值,此時(shí)返回的不是字符的集合,而是字符數(shù)組的集合。 例如從客戶列和產(chǎn)品列提取不重復(fù)的值:'定義數(shù)組集合的時(shí)候,要在類(lèi)型后加上括號(hào),表示這是一個(gè)數(shù)組集合。Dim Arys As List(Of String。)Arys = DataTables(&quo
32、t;訂單").GetValues("產(chǎn)品|客戶")列名用符號(hào)|分害U'注意循環(huán)變量是字符型數(shù)組,所以類(lèi)型是String。,而不是StringFor Each Ary As String。In ArysOutput.Show(Ary(0) & "|" & Ary(1)Next上面的代碼是從客戶和產(chǎn)品兩列提取不重復(fù)的值,返回的不是一個(gè)字符集合,而是一個(gè)字符數(shù)組集合,每個(gè)數(shù)組包括兩個(gè)元素,第一個(gè)元素是客戶值,第二個(gè)元素是產(chǎn)品值。GetComboListString從指定的列中提取不重復(fù)的值,用符號(hào)"|"將這
33、些值連接成一個(gè)字符串,并返回這個(gè)字符串。此方法通常用于動(dòng)態(tài)設(shè)置列表項(xiàng)目。語(yǔ)法:GetComboListString(ColumnName , Filter, Sort)ColumnName :列名稱(chēng),從此列中提取不重復(fù)的值。Filter: 可選參數(shù),指定一個(gè)條件表達(dá)式,只返回符合此條件的值。Sort:可選參數(shù),指定排序列,如果省略,則根據(jù)取值列排序,通常無(wú)需設(shè)置。請(qǐng)參考表達(dá)式的 運(yùn)算符和函數(shù) 和 條件表達(dá)式 示例一列出訂單表所有的客戶:Dim s As String = DataTables("訂單").GetComboListString("客戶")
34、output.show(s) 示例二返回的值默認(rèn)按取值列排序,可以另外指定排序列,例如按產(chǎn)品編號(hào)順序,列出產(chǎn)品表中所有的產(chǎn)品名稱(chēng):Dim s As String = DataTables(" 產(chǎn)品").GetComboListString("產(chǎn)品名稱(chēng)","","產(chǎn)品編號(hào)") output.show(s) 示例三可以給排序列加上關(guān)鍵詞,例如按最近一次訂貨的日期順序,列出訂單表中的客戶名單:Dim s As String = DataTables("訂單").GetComboListString(&
35、quot;客戶","","日期 Desc")Output.Show(s)實(shí)例四可以設(shè)置取值條件,例如從客戶表中提取華北地區(qū)的客戶名單:Dim s As Strings = DataTables("客戶").GetComboListString("客戶名稱(chēng)","地區(qū)='華北"')Output.Show(s)示例五可以同時(shí)設(shè)置取值條件和排序列,例如按日期順序,列出 2012年6月1日后訂購(gòu)過(guò)PD01 產(chǎn)品的客戶名單:Dim s As Strings = DataTables
36、("訂單").GetComboListString(" 客 戶","產(chǎn)品尸'PD01' And 日 期 #6/1/2012#","日期")Output.Show(s)Compute根據(jù)條件統(tǒng)計(jì)表中數(shù)據(jù)。語(yǔ)法:Compute(Expression, Filter)Expression:要計(jì)算的表達(dá)式,使用 聚合函數(shù)進(jìn)行統(tǒng)計(jì)。Filter:可選參數(shù),用于設(shè)置計(jì)算條件,請(qǐng)參考表達(dá)式的運(yùn)算符和函數(shù) 和條件表達(dá)式。在執(zhí)行以下示例之前,請(qǐng)打開(kāi)CaseStudy目錄下的示例文件"統(tǒng)計(jì)演示.Table&q
37、uot;。示例一計(jì)算總的銷(xiāo)售數(shù)量和金額:Dim Total As IntegerDim Amount As DoubleWith DataTables("訂單")Total = .Compute("Sum(數(shù)量)")Amount = .Compute("Sum( 金額)")End WithOutput.Show("數(shù)量:"& Total)Output.Show("金額:"& Amount)示例二計(jì)算產(chǎn)品PD01的銷(xiāo)售數(shù)量:Dim Total As LongTotal = Data
38、Tables("訂單").Compute("Sum(數(shù)量廠"產(chǎn)品='PD01'")Output.Show(Total)實(shí)例三統(tǒng)計(jì)雇員EP01成交的訂購(gòu)數(shù)量超過(guò)500的訂單數(shù):Dim cnt As Integer cnt = DataTables("訂單").Compute("Count(客戶)”,"雇員 ='EP01' And 數(shù)量 > 500") Output.Show("訂單數(shù):"& cnt)示例四計(jì)算每個(gè)客戶的訂購(gòu)數(shù)量:Di
39、m dt As DataTable = DataTables(" 訂單")Dim Total As IntegerDim Customers As List(Of String)Customers = dt.GetValues("客戶")For Each Customer As String In CustomersTotal = dt.Compute("Sum( 數(shù)量)","客戶='"& Customer & ""')Output.Show(Customer &
40、amp; ":" & Total)Next上述代碼中,F(xiàn)ilter參數(shù)分成了三部分,各部分用運(yùn)算符&連接起來(lái):"客戶='"& Customer & 皿如果客戶名稱(chēng)為 CS01,那么三部分組合后,F(xiàn)ilter參數(shù)就等于:"客戶='CS01'"通過(guò)代碼動(dòng)態(tài)合成條件表達(dá)式,是一種基本的技能,大家務(wù)必要掌握。參考:GetValuesFind在DataTable查找符合條件的行,如果找到的話,返回找到的行,否則返回Nothing 。如果有多個(gè)符合條件的行,默認(rèn)返回第一個(gè),也可以指定返回第幾
41、個(gè)符合條件的行。語(yǔ)法:Find(Filter,Sort,Index)Filter:條件表達(dá)式,請(qǐng)參考表達(dá)式的運(yùn)算符和函數(shù) 和條件表達(dá)式。Sort:可選參數(shù),指定排序方式。Index:可選參數(shù),指定返回第幾個(gè)符合條件的行,0表示第一行。示例一:Dim dr As DataRowdr = DataTables("產(chǎn)品").Find("產(chǎn)品編號(hào) =03'")'找出編號(hào)為 03的產(chǎn)品With DataTables("訂單")dr =.Find("產(chǎn)品='PD01二"日期")找出第一次訂購(gòu)
42、PD01產(chǎn)品的記錄dr =.Find("產(chǎn)品='PD01二"日期",1)'找出第二次訂購(gòu) PD01產(chǎn)品的記錄End With示例二:有的時(shí)候,我們需要查找倒數(shù)第幾行數(shù)據(jù),例如最近一次訂購(gòu)某產(chǎn)品的記錄??梢詤⒖枷旅娴拇a:Dim dr As DataRowWith DataTables("訂單")dr = .Find("產(chǎn)品='PD01二"日期Desc")找出最后一次訂購(gòu) PD01產(chǎn)品的記錄dr =.Find("產(chǎn)品='PD0,"日期 Desc",1)
43、39;找出倒數(shù)第二次訂購(gòu)PD01產(chǎn)品的記錄End With可以看到代碼和原來(lái)幾乎一樣,唯一的變化是排序參數(shù),被改為:日期Desc加上DESC使得日期按照降序排序,最后的日期排在最前面,我們所找出的第一條記錄,就是最后一次訂購(gòu)產(chǎn)品 PD01的記錄。示例三通常應(yīng)該在代碼中判斷是否找到了符合條件的行,然后再運(yùn)行后續(xù)的代碼。例如要找出最近一次訂購(gòu)產(chǎn)品數(shù)量超過(guò)1000的訂單,并顯示訂單的日期和客戶:Dim dr As DataRowdr = DataTables("訂單)Find("數(shù)量 > 1000","日期 Desc")If dr IsNot
44、Nothing Then ' 如果找到的話Output.Show("日期:"& dr("日期")Output.Show("客戶:"& dr("客戶")End If如果我們不加上判斷,直接:Dim dr As DataRowdr = DataTables("訂單)Find("數(shù)量 > 1000","日期 Desc")Output.Show("日期:"& dr("日期")Output.Show
45、("客戶:"& dr("客戶")一旦訂單表并不存在訂購(gòu)數(shù)量超過(guò)1000的訂單,那么Find方法返回Nothing ,導(dǎo)致后續(xù)代碼運(yùn)行出錯(cuò)。Find函數(shù)只能找出一條符合條件的行,如果要同時(shí)找出所有符合條件的行,可以使用Select方法。Select以集合的形式,返回所有符合指定條件的行。語(yǔ)法:Select(Filter)Select(Filter,Sort)Filter:條件表達(dá)式,請(qǐng)參考表達(dá)式的運(yùn)算符和函數(shù)和條件表達(dá)式。Sort:可選參數(shù),指定排序方式我們經(jīng)常需要對(duì)符合某一條件的記錄,統(tǒng)一進(jìn)行處理,此時(shí) Select方法就派上用場(chǎng)了。示例一例如,
46、對(duì)于1999年1月4日訂購(gòu)PD01的訂單,希望將其折扣統(tǒng)一設(shè)置為0.12,代碼為:Dim drs As List(Of DataRow)drs = DataTables("訂單").Select("產(chǎn)品='PD01' And 日期尸 #1/4/1999#")For Each dr As Datarow In drsdr("折扣")=0.12Next示例二再例如,希望列出1999年1月4日訂購(gòu)PD01的客戶,按訂購(gòu)的數(shù)量排序:Dim drs As List(Of DataRow)drs = DataTables(&quo
47、t;訂單").Select("產(chǎn)品='PD01' And 日期尸 #1/4/1999#"," 數(shù)量 DESC")For Each dr As Datarow In drsOutput.show(dr("客戶")Next上面的代碼將Sort參數(shù)設(shè)置為“數(shù)量DESC',這樣返回的行不僅按數(shù)量排序,而且數(shù)量多的行排在前面。示例三Filter參數(shù)不能省略,如果希望返回所有行,將 Filter參數(shù)設(shè)置為""即可。例如希望按總分高低,依次顯示所有學(xué)生的姓名:For Each dr As Dat
48、aRow In DataTables("成績(jī)表").Select("","總分 DESC") Output.Show(dr("姓名")NextDeleteFor刪除符合條件的行。語(yǔ)法:DeleteFor(Filter)Filter: 一個(gè)表達(dá)式,用于指定刪除條件,請(qǐng)參考表達(dá)式的運(yùn)算符和函數(shù) 和 條件表達(dá)式例如:刪除訂單表中2007年2月1日以前的行,代碼為:DataTables("訂單").DeleteFor("日期 #2/1/2007#")RemoveFor移除符合條件的行
49、。所謂移除行,只是讓用戶再也看不到這些被移除的行,就像這些行從來(lái)沒(méi)有被加載過(guò)一樣;移除行從來(lái)都不會(huì)真正從文件中刪除行,重新打開(kāi)文件后,被移除的行將再次出現(xiàn)。語(yǔ)法:RemoveFor(Filter)Filter:指定移除條件。請(qǐng)參考表達(dá)式的運(yùn)算符和函數(shù) 和條件表達(dá)式。例如:DataTables("訂單").RemoveFor("產(chǎn)品='PD01'ReplaceFor找出符合條件的行,并將指定列的內(nèi)容替換為指定值。語(yǔ)法:ReplaceFor(DataColName,Value,Filter)DataColName :替換的列Value:替換值Filte
50、r:替換條件,請(qǐng)參考表達(dá)式的運(yùn)算符和函數(shù)和條件表達(dá)式。例如將訂單表中,訂購(gòu)數(shù)量大于600的訂單的折扣設(shè)為 0.15,只需簡(jiǎn)單的一行代碼即可:DataTables("訂單").ReplaceFor("折扣",0.15,"數(shù)量 600”)如果不用ReplaceFor,最精簡(jiǎn)的代碼也是:For Each dr As DataRow in DataTables(" 訂單").Select("數(shù)量 600")dr("折扣")=0.15NextRejectChanges撤銷(xiāo)自打開(kāi)文件或最近一次保存
51、以來(lái),對(duì)該表做出的修改。示例撤銷(xiāo)表A的修改:DataTables("表 A").RejectChanges()StopRedraw我們對(duì)表做的任何變動(dòng),例如編輯數(shù)據(jù)、增加行、刪除行、調(diào)整行高列寬,都會(huì)導(dǎo)致Table重新繪制,以便顯示變動(dòng)后的結(jié)果。如果要對(duì)DataTable連續(xù)地進(jìn)行大量的操作,為了避免相關(guān)Table(表)不停地閃爍,可以先執(zhí) 行StopRedraw方法禁止繪制表,操作完成后再執(zhí)行ResumeRedraw方法重新繪制表。StopRedraw方法會(huì)禁止繪制所有基于該DataTable的Table,直到執(zhí)行 ResumeRedraw方法恢復(fù)繪制。例如我們要在訂單表
52、中增加500行,代碼如下:With DataTables("訂單").StopRedrawFor i As Integer = 1 To 500.AddNew()Next.ResumeRedrawEnd With注意最后一定要記得執(zhí)行ResumeRedraw方法,否則表格不會(huì)再刷新。如果你將代碼修改為:With DataTables("訂單")For i As Integer = 1 To 500.AddNew()NextEnd With你可以看到代碼執(zhí)行過(guò)程中會(huì)不停地閃爍,而且執(zhí)行速度也比之前慢很多。StopRedraw和ResumeRedraw必須配
53、對(duì)執(zhí)行, 如果執(zhí)行了兩次 StopRedraw ,那么對(duì)應(yīng)的就 必須執(zhí)行兩次ResumeRedraw ,才會(huì)恢復(fù)繪制 Table。上面的代碼只是用于演示,實(shí)際上增加 500行最簡(jiǎn)單的代碼是:DataTables("訂單").AddNew(500)屬性屬性名說(shuō)明Type整數(shù)型,返回一個(gè)整數(shù),表示 DataTable的類(lèi)型Name字符型,返回DataTable的名稱(chēng)Caption字符型,返回DataTable的標(biāo)題HasChanges邏輯型,判斷DataTable的數(shù)據(jù)是否已經(jīng)被修改AllowEdit邏輯型,是否允許用戶修改表中數(shù)據(jù)AllowAddNew邏輯型,是否允許用戶增加
54、行AllowClipBoard邏輯型,是否允許復(fù)制粘貼數(shù)據(jù)AllowCopyHeader邏輯型,復(fù)制數(shù)據(jù)的時(shí)候是否包括列名AllowInitialize邏輯型,是否允許初始化此表AutoAddNew邏輯型,是否自動(dòng)增加行AllowDelete邏輯型,是否允許用戶刪除行AllowLockRow邏輯型,是否允許用戶鎖定行AllowUnlockRow邏輯型,是否允許用戶取消鎖定行AllowDragColumn邏輯型,是否允許通過(guò)拖動(dòng)列標(biāo)題來(lái)調(diào)整列位置AllowFreezeColumn邏輯型,是否允許通過(guò)鼠標(biāo)拖動(dòng)來(lái)調(diào)整凍結(jié)區(qū)AllowResizeColumn邏輯型,是否允許通過(guò)鼠標(biāo)拖動(dòng)來(lái)調(diào)整列寬All
55、owResizeRow邏輯型,是否允許通過(guò)鼠標(biāo)拖動(dòng)來(lái)調(diào)整行高AllowResizeSingleRow邏輯型,是否允許單獨(dú)調(diào)整某一行的高度EnterKeyActionDown邏輯型,按回車(chē)鍵是否向卜移到另一單兀格TabKeyActionDown邏輯型,按Tab鍵是否向卜移到另一單兀格MultiRowHeader邏輯型,是否啟用多層表頭。ConnectionName字符型,返回?cái)?shù)據(jù)源名稱(chēng)。FillLoadTimeOut整數(shù)型,設(shè)置加載數(shù)據(jù)時(shí)的超時(shí)時(shí)限,默認(rèn)30秒,一般不需要設(shè)置此屬性。SourceType整數(shù)型,返回?cái)?shù)據(jù)源的類(lèi)型,1表示Access, 2表示SQL Server,3 表小 Orac
56、le。方法方法說(shuō)明AddNew在DataTable中增加一行,并返回所增加的行Compute根據(jù)指定的條件計(jì)算指定的內(nèi)容Find在DataTable查找符合條件的行,如果找到的話,返回 Nothing返回找到的行,否則Select以集合的形式,返回所有符合指定條件的行Save保存數(shù)據(jù)ReplaceFor找出符合條件的行,并將指定列的內(nèi)容替換為指定值DeleteFor刪除符合條件的行RemoveFor移除符合條件的行RejectChanges撤銷(xiāo)自打開(kāi)文件或最次保存以來(lái),對(duì)該表做出的修改。AcceptChanges接受所有修改結(jié)果,使得這些修改不被保存。GetValues從指定列中,獲取不重復(fù)的
57、值,以集合的形式返回。GetUniqueValues從指定列中,獲取不重復(fù)的值,以集合的形式返回(此方法已經(jīng)被GetValues取代,請(qǐng)不要再使用)GetComboListString從指定的列中提取不重復(fù)的值,用符號(hào)"|"將這些值連接成一個(gè)字符串,并返回這個(gè)字符串ResumeRedraw恢復(fù)繪制表格StopRedraw暫停繪制表格BuildHeader重新生成表頭AddUserStyle增加自定義樣式下表的屬性和方法可以暫時(shí)忽略,這些是和動(dòng)態(tài)加載相關(guān)的屬性和方法,將在動(dòng)態(tài)加載 這一章專(zhuān)門(mén)講述:名稱(chēng)說(shuō)明LoadFilter屬性字符型,用于設(shè)置重新加載數(shù)據(jù)的條件表達(dá)式,語(yǔ)法和
58、所 使用的數(shù)據(jù)源有關(guān)。LoadOrder屬性字符型,指定加載數(shù)據(jù)的順序。_LoadTop屬性字符型,指定要加載的行數(shù),如果是分頁(yè)加載,則用于指 定每頁(yè)的行數(shù)。LoadReverse屬性邏輯型,是否反向加載,即是否先加載新數(shù)據(jù),此屬性只 后在分頁(yè)加載的時(shí)候才有效。LoadOver屬性字符型,用于指定分頁(yè)加載依據(jù)列。LoadPage屬性整數(shù)型,指定要加載的頁(yè)號(hào)TotalPages屬性整數(shù)型,返回分頁(yè)加載時(shí),總的可加載總頁(yè)數(shù)Load方法加載數(shù)據(jù)SQLLoad方法根據(jù)指定的SQL語(yǔ)句加載數(shù)據(jù)JAppendLoad方法追載符合條件的新數(shù)據(jù)LoadChildren方法加載指定子表的數(shù)據(jù),且只加載那些父表已
59、經(jīng)存在對(duì)應(yīng)行 的子表數(shù)據(jù)。SQLCompute方法計(jì)算后臺(tái)所有數(shù)據(jù)SQLReplaceFor方法批量更新后臺(tái)數(shù)SQLDeleteFor方法批量刪除后臺(tái)數(shù)據(jù)SQLSelect方法從后臺(tái)查詢數(shù)據(jù)SQLUpdate方法保存通過(guò)SQLSelect查詢得到的數(shù)據(jù)SQLFind方法從后臺(tái)查找數(shù)據(jù)SQLGetValues方法從后臺(tái)的指定列中提取不重復(fù)值,以集合的形式返回SQLGetComboListString方法從后臺(tái)的指定的列中提取不重復(fù)的值,用符號(hào)"|"將這些值連接成一個(gè)字符串,并返回這個(gè)字符串關(guān)于 DataTables前面我們已經(jīng)通過(guò) DataTables集合,引用指定名稱(chēng)的Da
60、taTable ,例如:DataTables("產(chǎn)品").Save()DataTables("訂單").AllowEdit = False既然是集合,我們就可以通過(guò)For Each語(yǔ)句遍歷集合中所有元素。例如下面的代碼,列出所有 DataTable的名稱(chēng):For Each dt As DataTable In DataTablesOutput.Show(dt.Name)NextDataTables 的屬性:Count用于返回DataTable的數(shù)量。AllowEdit是否允許編輯數(shù)據(jù)。默認(rèn)為T(mén)rue,如果將此屬性設(shè)為False,將鎖定所有 DataTab
61、le,相當(dāng)于單擊菜單中的“查閱模式”按鈕。例如:Output.Show("總表數(shù):"& DataTables.Count)DataTables.AllowEdit = False '鎖定所有表,進(jìn)入查閱模式DataTables.AllowEdit = True只有DataTables和DataTable的AllowEdit屬性都為 True的情況下,我們才能夠在 DataTable 中輸入數(shù)據(jù)。DataTables 的方法:Save保存所有表,等同于單擊菜單中的“保存”按鈕。Contains判斷是否存在指定名稱(chēng)的DataTable,如果存在,則返回 True,否則返回FalseRejectChanges撤銷(xiāo)自打開(kāi)文件或最近一次保存以來(lái)的全部修改。Load加載表,這個(gè)方法的使用會(huì)在動(dòng)態(tài)加載這一章進(jìn)行介
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《從傳統(tǒng)到時(shí)尚》課件
- 七大洲四大洋的位置
- 山東省煙臺(tái)市招遠(yuǎn)市(五四學(xué)制)2024-2025學(xué)年九年級(jí)上學(xué)期期末考試道德與法治試卷(含答案)
- 2024年全國(guó)社會(huì)工作者初級(jí)職業(yè)水平《社會(huì)工作實(shí)務(wù)》考試題參考答案
- 單位管理制度展示合集【人事管理篇】
- 單位管理制度展示大合集職員管理十篇
- 定期報(bào)告:一月可能繼續(xù)震蕩偏強(qiáng)中小盤(pán)成長(zhǎng)占優(yōu)
- 2024-2030年中國(guó)偶氮顏料行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 單位管理制度展示大合集職工管理篇十篇
- 單位管理制度品讀選集【員工管理篇】
- 網(wǎng)絡(luò)賭博、網(wǎng)絡(luò)借貸和網(wǎng)絡(luò)詐騙的危害
- 《中西醫(yī)的區(qū)別》課件
- RFID電子標(biāo)簽制作方法
- 智能制造企業(yè)數(shù)字化轉(zhuǎn)型建設(shè)方案
- 病理生理學(xué)課件脂代謝紊亂
- 教師幽默朗誦節(jié)目《我愛(ài)上班》
- 《細(xì)胞工程學(xué)》考試復(fù)習(xí)題庫(kù)(帶答案)
- 中學(xué)課堂教學(xué)評(píng)價(jià)量表
- 食堂食材配送以及售后服務(wù)方案
- 塊單項(xiàng)活動(dòng)教學(xué)材料教案丹霞地貌
- 青年人應(yīng)該如何樹(shù)立正確的人生觀
評(píng)論
0/150
提交評(píng)論