FOXTABLE編程_第1頁
FOXTABLE編程_第2頁
FOXTABLE編程_第3頁
FOXTABLE編程_第4頁
FOXTABLE編程_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數(shù)據(jù)綁定最簡單的綁定首先還是打開我們的示例文件專業(yè)報表.Table”,然后在命令窗口執(zhí)行下面的代碼:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables(" 訂單")'將 rt 綁定到訂單表rt.Text= "Fields!產(chǎn)品.Value"'設置打印字段doc.body.Children.Add(rt)doc.Preview()上述代碼會打印出訂單表中每一行的產(chǎn)品名稱。DataBinding用于設置打印對象的綁定

2、屬性,該屬性包括一些子屬性,DataSource表示數(shù)據(jù)來源,數(shù)據(jù)來源可以是Table,還可以是數(shù)組或者集合。需要注意的是,不能直接綁定到 Table,如果要綁定到 Table,必須用BindTables來設置, 例如: rt.DataBinding.DataSource = BindTables(" 訂單") 如果對象的內容來自于某一列,其Text屬性的設置格式如下:Fields!列名稱.Value使用表達式在命令窗口執(zhí)行下面的代碼:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.Data

3、Source = BindTables(" 訂單")'將 rt 綁定到訂單表rt.Text= "Math.Round(Fields!金額.Value,1)"'設置打印表達式doc.body.Children.Add(rt)doc.Preview()留意方括號中的內容:Math.Round(Fields!金額.Value,1)意思是打印的時候將金額列的內容,保留一位小數(shù),你可以在Text屬性中使用Foxtable支持的所有函數(shù)。 注意表達式必須用方括號括起來。日期的打印為了得到常規(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()要記得對于字符串中的每一個雙引號,都必須用兩個雙引號來表示。在命令窗口執(zhí)行下面的代碼:綁定多個字段為了打印出訂單表中的日期和數(shù)量,在

5、命令窗口執(zhí)行下面的代碼:需要使用容器(RenderArea),將原來的打印對象加入到容器中,這些打印對象不再需要設置 綁定,只需為容器設置綁定即可。例如: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)'將打印對象添加到容器中rt = New prt.RenderTextrt.Text= "Fields!數(shù)量.Value"ra.Children.Add(rt)doc.body.Children.Add(ra)doc.Preview()上述的代碼將依次打印每一個訂單的日期和數(shù)量。打印標簽有了綁定,打印標簽比以前更簡單。示例Dim doc As New PrintDoc ' 定義一個報表Doc.Stacking = prt.StackingRulesEnum.InlineLeftToRightDim ra As New prt.RenderAr

7、eaDim rt As prt.RenderTextra.Width = 40 '設置標簽寬度ra.SplitHorzBehavior = prt.SplitBehaviorEnum.Never ' 禁止水平分割ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never '禁止垂直分割ra.Style.Spacing.Right = 2 '設置標簽之間的所有和上下間隔為2毫米ra.Style.Spacing.Bottom = 2ra.Style.Padding.All = 1 ' 標簽內容距離邊框為1毫米ra.S

8、tyle.Borders.All = New prt.Linedef(0.3, Color.Red)'設置邊框ra.DataBinding.DataSource = BindTables(" 員工")將容器綁定到員工表Doc.Body.ChildRen.Add(ra)'將容器加入到報表中rt = New prt.RenderTextrt.Text ="姓名:Fields!姓名.Value"ra.Children.Add(rt)'添加到容器中rt = New prt.RenderTextrt.Text ="部門:Field

9、s!部門.Value"ra.Children.Add(rt)'添加到容器中rt = New prt.RenderTextrt.Text ="職務:Fields!職務.Value"ra.Children.Add(rt)'添加到容器中Doc.Preview()'預覽報表表格與綁定行組也可以設置綁定,這樣我們可以很方便地將一個表格綁定到數(shù)據(jù)表。例如,打印訂單表中的某些列,代碼非常簡單:Dim doc As New PrintDocDim rt As New prt.RenderTableDim tb as Table = Tables("

10、;訂單")Dim ColNames As String() = New String()" 產(chǎn)品","客戶","單價","數(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"' 設置綁定表達式Nextrt.RowGroups(0,1).Style.TextAlignVert = prt.AlignVertEnum.Center '第一行內容垂直居中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ù),自動生成副本,完成整個表格的打印。FOXtable編程基本概念DataTable 和 TableFoxtable中有一個集合 DataTables ,通過該集合可以獲得指定名稱的表,例如:DataTables("產(chǎn)品")'產(chǎn)品表DataTables("客戶")客

13、戶表DataTables("訂單")'訂單表實際上你是看不到 DataTable的,你看到的是 Table ,也就是說,上面的三個圖,實際上就是三個Table。那么什么是Table呢?你可以這樣理解,DataTable就像一個倉庫,所有從數(shù)據(jù)文件中加載的數(shù)據(jù),都存放在這里,而且這個倉庫是不直接面對用戶的;而 Table就像一個展廳,是負 責和用戶打交道的,這個展廳(Table)從倉庫(DataTable)中取得數(shù)據(jù),并呈現(xiàn)給用戶。同樣,F(xiàn)oxtable中也有一個集合 Tables ,通過該集合可以獲得指定名稱的Table ,在沒有建立關聯(lián)的情況下,我們這個簡化的訂單

14、管理系統(tǒng)包括三個Table,分別是:Tables("產(chǎn)品") Tables("客戶") Tables("訂單")在初始的,f#況下,Table會從DataTable中提取所有數(shù)據(jù)呈現(xiàn)給用戶,如果你設置了篩選條 件,Table就會從DataTable提取符合篩選條件的數(shù)據(jù),然后呈現(xiàn)給用戶。例如訂單表有1000行數(shù)據(jù),那么DataTables("訂單”)從頭到尾,始終都會有1000行數(shù)據(jù),不受篩選的影響。而 Tables("訂單")卻不一樣,如果沒有進行篩選,那么Tables("訂單")也

15、會包括所有數(shù)據(jù),也就是1000行數(shù)據(jù)全部可見。如果現(xiàn)在從中篩選出產(chǎn)品為PD01的訂單,且PD01的訂單是200個,那么經(jīng)過篩選后,Tables("訂單”)會包括200行數(shù)據(jù),也就是你看 到的那200個產(chǎn)品為PD01的訂單。所以關于DataTable和Table的關系,較為完整的描述是:從數(shù)據(jù)文件加載到 Foxtable中的數(shù)據(jù),是存放在DataTable中的,它就像一個倉庫,不直接 面對用戶;而Table就像一個展廳,是負責和用戶打交道的,它根據(jù)指令從倉庫(DataTable)中提取符合條件的數(shù)據(jù),然后呈現(xiàn)給用戶;通過菜單進行的日常數(shù)據(jù)管理工作,例如增加行、刪除行、排序、篩選、匯總等

16、等,都是在 Table中進行的;除了編程,用戶沒有辦法直接對 DataTable進行操作,因為它是不可見的。在任何時候,DataTable都包括所有已經(jīng)加載的行。Table中的行,既可以排序,也可以篩選,所有 Table中行的數(shù)量和順序都是可變化的,我 們平時所看到的、所操作的,都是 Table中的行。我們在Table中進行的任何操作,最終都會反映到DataTable ,例如我們通過菜單在Table中刪除行,DataTable也會刪除一行。關聯(lián)表和Table定在上面這個簡化的訂單管理系統(tǒng)中,我們建立如下兩個關聯(lián):父表關聯(lián)列產(chǎn)品訂單產(chǎn)品編號客戶訂單客戶編號因為關聯(lián)的建立,DataTable和Ta

17、ble不再是一一對應的關系,例如我選擇產(chǎn)品表的時候,就會出現(xiàn)三個Table ,分別是:三個Table的作用為:Tables("產(chǎn)品"):主表,用于顯示所有產(chǎn)品Tables("產(chǎn)品訂單)如果在Tables("產(chǎn)品。中選定一個產(chǎn)品,這里會顯示該產(chǎn)品的全部訂單。Tables("產(chǎn)品訂單.客戶"):如果在Tables("產(chǎn)品.訂單。中選定一個訂單,這里會顯示該訂單所 屬的客戶。同樣在選擇客戶表的時候,也會出現(xiàn)三個Table:Tables("客戶")Tables("客戶訂單")Tables(&q

18、uot;客戶.訂單.產(chǎn)品")而選擇訂單表,出現(xiàn)的三個Table為:Tables("訂單")Tables("訂單.產(chǎn)品")Tables("訂單.客戶”)由此我們可以看出,同一個 DataTable可以有多個 Table,例如下面三個 Table:Tables("產(chǎn)品")Tables("訂單.產(chǎn)品")Tables("客戶.訂單.產(chǎn)品")它們的數(shù)據(jù)全部來自于DataTables("產(chǎn)品”)。由此可見,DataTable的數(shù)量是固定的,而 Table的數(shù)量會隨著關聯(lián)的增加而

19、增加,同一個DataTable可以有多個Table ,每個Table都各取所需地從 DataTable中提取數(shù)據(jù)呈現(xiàn)給用戶。DataTable 概述通過DataTables集合,可以獲得指定名稱的DataTable(表)。例如:Dim dt As DataTabledt = DataTables("訂單")DataCol 表示 DataTable 中的列。通過DataCols集合,可以獲得指定名稱的DataCol",例如:Dim dt As DataTable = DataTables(" 訂單")Dim dc As DataCol = dt.

20、DataCols(" 日期")DataRow 表示 DataTable 中的行。通過DataRows集合,可以獲得某一位置的DataRow(行)。例如:Dim dr As DataRowdr = DataTables("訂單").DataRows(0)行是從。開始編號的,所以0表示第一行,1表示第二行。通過列名稱,我們可以得到或設置某一行指定列的內容。例如:Dim r As DataRowDim v As Doubler = DataTables("訂單").DataRows(0)r("數(shù)量")=100v = r(

21、"折扣")由此可知,DataTable、DataRow、DataCol構成了表、行、列這樣一個完整的結構體系,接 下來我們具體介紹這三個對象。DataTable常用屬性通過DataTables集合,可以獲得指定名稱的DataTable(表)。例如:Dim dt As DataTabledt = DataTables("訂單")如果要禁止編輯某個DataTable,只需將其 AllowEdit屬性設為False,例如:DataTables("訂單").AllowEdit = False在命令窗口執(zhí)行上述代碼,你會發(fā)現(xiàn)訂單表的左上角出現(xiàn)一

22、個鎖形標記,表示此表已經(jīng)被鎖定,不能在其中輸入數(shù)據(jù)。如果你要取消鎖定表,只需將其AllowEdit屬性重新設為True:DataTables("訂單").AllowEdit = True卜表列出了 DataTable的常用設置屬性,它們的用法和 AllowEdit屬性完全一樣:屬性名說明AllowEdit是否允許修改表中數(shù)據(jù)AllowAddNew是否允許增加行AllowClipBoard是否允許復制粘貼數(shù)據(jù)AllowInitialize是否允許初始化此表AutoAddNew是否允許自動增加行,也就是在最舟-行的最舟-個單兀格按回車鍵時, 是否自動增加一行AllowDelet

23、e是否允許刪除行AllowLockRow是否允許鎖定行AllowUnlockRow是否允許取消鎖定行我們在編輯數(shù)據(jù)的時候,如果按回車鍵或Tab鍵,光標會向右移到下一單元格,通過下面的屬性,你可以改變這種默認的光標移動方式:屬性名說明EnterKeyActionDown按回車鍵是否向下移到另一單兀格TabKeyActionDown按Tab鍵是否向卜移到另一單兀格例如你希望按回車鍵向下移動光標,而不是向右移動,只需將 EnterKeyActionDown屬性設為True即可:DataTables("訂單").EnterKeyActionDown = True最后三個常用的屬性為

24、:屬性名說明Name返回DataTable的名稱返回一個整數(shù),表不 DataTable的類型:|Type1內部數(shù)據(jù)表2內部查詢表3外部數(shù)據(jù)表J4外部查詢表5臨時表HasChanges邏輯型,判斷 DataTable的數(shù)據(jù)是否已經(jīng)被修改例如執(zhí)行下面的代碼,將列出所有已經(jīng)修改過的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 '將新增行的日期設為當天日期。其實我們很少直接向DataTable增加行,更多的時候,我們是向Table中增加行,原因以后會講述。Save保存數(shù)據(jù)。語法:Save()Save(Setting

26、)Setting:可選參數(shù),是否保存設置。例如單單保存數(shù)據(jù):DataTables("訂單").Save()同時保存數(shù)據(jù)和設置:DataTables("訂單").Save(True)保存設置比較耗時,會影響保存速度。菜單中的保存命令是同時保存數(shù)據(jù)和設置的。如果你學會了設計菜單或窗口,你可以自己設計一個保存按鈕,將其代碼設為:For Each dt As DataTable In DataTablesdt.Save()Next這樣單擊這個按鈕就能保存所有表,但是不會保存設置;對于一個成熟的、已經(jīng)交付使用的項目,有時是沒有必要保存設置的。GetValues從指

27、定列中,獲取不重復的值,以 集合的形式返回。語法:GetValues(ColumnName,Filter,Sort)ColumnName :列名稱,從此列中提取不重復的值。Filter:可選參數(shù),指定一個條件表達式,只返回符合此條件的值;請參考表達式的運算符和函數(shù)和條件表達式 Sort:可選參數(shù),指定排序列,如果省略,則根據(jù)取值列排序,通常無需設置。示例一 列出產(chǎn)品表中所有的產(chǎn)品名稱: Dim Products As List(Of String)Products = DataTables("產(chǎn)品").GetValues("產(chǎn)品名稱")For Each

28、Product As String In Products Output.Show(Product)Next示例二返回的值默認按照取值列排序,我們可以另外指定排序列;例如按產(chǎn)品編號順序,列出產(chǎn)品表中所有的產(chǎn)品名稱:Dim Products As List(Of String)Products = DataTables("產(chǎn)品").GetValues("產(chǎn)品名稱","","產(chǎn)品編號")For Each Product As String In Products Output.Show(Product)Next示例三給

29、排序列加上 DESC關鍵詞,返回值可以降序排序,例如按最近一次訂貨的日期順序,列出 訂單表中的客戶名單:Dim Customers As List(Of String)Customers = DataTables("訂單").GetValues("客戶","","日期 Desc")For Each Customer As String In Customers Output.Show(Customer)Next示例四可以設置取值條件,列出產(chǎn)品表中單價大于100的產(chǎn)品:Dim Products As List(Of

30、String)Products = DataTables("產(chǎn)品").GetValues("產(chǎn)品名稱","單價 > 100")For Each Product As String In Products Output.Show(Product)Next示例五可以同時設置取值條件和排序列,例如按日期順序,列出 2012年6月1日后訂購過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示例六下面這個例子,一般用戶客戶忽略??梢酝瑫r從多列提取不重復的值,此時返回的不是字符的集合,而是字符數(shù)組的集合。 例如從客戶列和產(chǎn)品列提取不重復的值:'定義數(shù)組集合的時候,要在類型后加上括號,表示這是一個數(shù)組集合。Dim Arys As List(Of String。)Arys = DataTables(&quo

32、t;訂單").GetValues("產(chǎn)品|客戶")列名用符號|分害U'注意循環(huán)變量是字符型數(shù)組,所以類型是String。,而不是StringFor Each Ary As String。In ArysOutput.Show(Ary(0) & "|" & Ary(1)Next上面的代碼是從客戶和產(chǎn)品兩列提取不重復的值,返回的不是一個字符集合,而是一個字符數(shù)組集合,每個數(shù)組包括兩個元素,第一個元素是客戶值,第二個元素是產(chǎn)品值。GetComboListString從指定的列中提取不重復的值,用符號"|"將這

33、些值連接成一個字符串,并返回這個字符串。此方法通常用于動態(tài)設置列表項目。語法:GetComboListString(ColumnName , Filter, Sort)ColumnName :列名稱,從此列中提取不重復的值。Filter: 可選參數(shù),指定一個條件表達式,只返回符合此條件的值。Sort:可選參數(shù),指定排序列,如果省略,則根據(jù)取值列排序,通常無需設置。請參考表達式的 運算符和函數(shù) 和 條件表達式 示例一列出訂單表所有的客戶:Dim s As String = DataTables("訂單").GetComboListString("客戶")

34、output.show(s) 示例二返回的值默認按取值列排序,可以另外指定排序列,例如按產(chǎn)品編號順序,列出產(chǎn)品表中所有的產(chǎn)品名稱:Dim s As String = DataTables(" 產(chǎn)品").GetComboListString("產(chǎn)品名稱","","產(chǎn)品編號") output.show(s) 示例三可以給排序列加上關鍵詞,例如按最近一次訂貨的日期順序,列出訂單表中的客戶名單:Dim s As String = DataTables("訂單").GetComboListString(&

35、quot;客戶","","日期 Desc")Output.Show(s)實例四可以設置取值條件,例如從客戶表中提取華北地區(qū)的客戶名單:Dim s As Strings = DataTables("客戶").GetComboListString("客戶名稱","地區(qū)='華北"')Output.Show(s)示例五可以同時設置取值條件和排序列,例如按日期順序,列出 2012年6月1日后訂購過PD01 產(chǎn)品的客戶名單:Dim s As Strings = DataTables

36、("訂單").GetComboListString(" 客 戶","產(chǎn)品尸'PD01' And 日 期 #6/1/2012#","日期")Output.Show(s)Compute根據(jù)條件統(tǒng)計表中數(shù)據(jù)。語法:Compute(Expression, Filter)Expression:要計算的表達式,使用 聚合函數(shù)進行統(tǒng)計。Filter:可選參數(shù),用于設置計算條件,請參考表達式的運算符和函數(shù) 和條件表達式。在執(zhí)行以下示例之前,請打開CaseStudy目錄下的示例文件"統(tǒng)計演示.Table&q

37、uot;。示例一計算總的銷售數(shù)量和金額:Dim Total As IntegerDim Amount As DoubleWith DataTables("訂單")Total = .Compute("Sum(數(shù)量)")Amount = .Compute("Sum( 金額)")End WithOutput.Show("數(shù)量:"& Total)Output.Show("金額:"& Amount)示例二計算產(chǎn)品PD01的銷售數(shù)量:Dim Total As LongTotal = Data

38、Tables("訂單").Compute("Sum(數(shù)量廠"產(chǎn)品='PD01'")Output.Show(Total)實例三統(tǒng)計雇員EP01成交的訂購數(shù)量超過500的訂單數(shù):Dim cnt As Integer cnt = DataTables("訂單").Compute("Count(客戶)”,"雇員 ='EP01' And 數(shù)量 > 500") Output.Show("訂單數(shù):"& cnt)示例四計算每個客戶的訂購數(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ù)分成了三部分,各部分用運算符&連接起來:"客戶='"& Customer & 皿如果客戶名稱為 CS01,那么三部分組合后,F(xiàn)ilter參數(shù)就等于:"客戶='CS01'"通過代碼動態(tài)合成條件表達式,是一種基本的技能,大家務必要掌握。參考:GetValuesFind在DataTable查找符合條件的行,如果找到的話,返回找到的行,否則返回Nothing 。如果有多個符合條件的行,默認返回第一個,也可以指定返回第幾

41、個符合條件的行。語法:Find(Filter,Sort,Index)Filter:條件表達式,請參考表達式的運算符和函數(shù) 和條件表達式。Sort:可選參數(shù),指定排序方式。Index:可選參數(shù),指定返回第幾個符合條件的行,0表示第一行。示例一:Dim dr As DataRowdr = DataTables("產(chǎn)品").Find("產(chǎn)品編號 =03'")'找出編號為 03的產(chǎn)品With DataTables("訂單")dr =.Find("產(chǎn)品='PD01二"日期")找出第一次訂購

42、PD01產(chǎn)品的記錄dr =.Find("產(chǎn)品='PD01二"日期",1)'找出第二次訂購 PD01產(chǎn)品的記錄End With示例二:有的時候,我們需要查找倒數(shù)第幾行數(shù)據(jù),例如最近一次訂購某產(chǎn)品的記錄。可以參考下面的代碼:Dim dr As DataRowWith DataTables("訂單")dr = .Find("產(chǎn)品='PD01二"日期Desc")找出最后一次訂購 PD01產(chǎn)品的記錄dr =.Find("產(chǎn)品='PD0,"日期 Desc",1)&#

43、39;找出倒數(shù)第二次訂購PD01產(chǎn)品的記錄End With可以看到代碼和原來幾乎一樣,唯一的變化是排序參數(shù),被改為:日期Desc加上DESC使得日期按照降序排序,最后的日期排在最前面,我們所找出的第一條記錄,就是最后一次訂購產(chǎn)品 PD01的記錄。示例三通常應該在代碼中判斷是否找到了符合條件的行,然后再運行后續(xù)的代碼。例如要找出最近一次訂購產(chǎn)品數(shù)量超過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("客戶")一旦訂單表并不存在訂購數(shù)量超過1000的訂單,那么Find方法返回Nothing ,導致后續(xù)代碼運行出錯。Find函數(shù)只能找出一條符合條件的行,如果要同時找出所有符合條件的行,可以使用Select方法。Select以集合的形式,返回所有符合指定條件的行。語法:Select(Filter)Select(Filter,Sort)Filter:條件表達式,請參考表達式的運算符和函數(shù)和條件表達式。Sort:可選參數(shù),指定排序方式我們經(jīng)常需要對符合某一條件的記錄,統(tǒng)一進行處理,此時 Select方法就派上用場了。示例一例如,

46、對于1999年1月4日訂購PD01的訂單,希望將其折扣統(tǒng)一設置為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日訂購PD01的客戶,按訂購的數(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ù)量DESC',這樣返回的行不僅按數(shù)量排序,而且數(shù)量多的行排在前面。示例三Filter參數(shù)不能省略,如果希望返回所有行,將 Filter參數(shù)設置為""即可。例如希望按總分高低,依次顯示所有學生的姓名:For Each dr As Dat

48、aRow In DataTables("成績表").Select("","總分 DESC") Output.Show(dr("姓名")NextDeleteFor刪除符合條件的行。語法:DeleteFor(Filter)Filter: 一個表達式,用于指定刪除條件,請參考表達式的運算符和函數(shù) 和 條件表達式例如:刪除訂單表中2007年2月1日以前的行,代碼為:DataTables("訂單").DeleteFor("日期 #2/1/2007#")RemoveFor移除符合條件的行

49、。所謂移除行,只是讓用戶再也看不到這些被移除的行,就像這些行從來沒有被加載過一樣;移除行從來都不會真正從文件中刪除行,重新打開文件后,被移除的行將再次出現(xiàn)。語法:RemoveFor(Filter)Filter:指定移除條件。請參考表達式的運算符和函數(shù) 和條件表達式。例如:DataTables("訂單").RemoveFor("產(chǎn)品='PD01'ReplaceFor找出符合條件的行,并將指定列的內容替換為指定值。語法:ReplaceFor(DataColName,Value,Filter)DataColName :替換的列Value:替換值Filte

50、r:替換條件,請參考表達式的運算符和函數(shù)和條件表達式。例如將訂單表中,訂購數(shù)量大于600的訂單的折扣設為 0.15,只需簡單的一行代碼即可:DataTables("訂單").ReplaceFor("折扣",0.15,"數(shù)量 600”)如果不用ReplaceFor,最精簡的代碼也是:For Each dr As DataRow in DataTables(" 訂單").Select("數(shù)量 600")dr("折扣")=0.15NextRejectChanges撤銷自打開文件或最近一次保存

51、以來,對該表做出的修改。示例撤銷表A的修改:DataTables("表 A").RejectChanges()StopRedraw我們對表做的任何變動,例如編輯數(shù)據(jù)、增加行、刪除行、調整行高列寬,都會導致Table重新繪制,以便顯示變動后的結果。如果要對DataTable連續(xù)地進行大量的操作,為了避免相關Table(表)不停地閃爍,可以先執(zhí) 行StopRedraw方法禁止繪制表,操作完成后再執(zhí)行ResumeRedraw方法重新繪制表。StopRedraw方法會禁止繪制所有基于該DataTable的Table,直到執(zhí)行 ResumeRedraw方法恢復繪制。例如我們要在訂單表

52、中增加500行,代碼如下:With DataTables("訂單").StopRedrawFor i As Integer = 1 To 500.AddNew()Next.ResumeRedrawEnd With注意最后一定要記得執(zhí)行ResumeRedraw方法,否則表格不會再刷新。如果你將代碼修改為:With DataTables("訂單")For i As Integer = 1 To 500.AddNew()NextEnd With你可以看到代碼執(zhí)行過程中會不停地閃爍,而且執(zhí)行速度也比之前慢很多。StopRedraw和ResumeRedraw必須配

53、對執(zhí)行, 如果執(zhí)行了兩次 StopRedraw ,那么對應的就 必須執(zhí)行兩次ResumeRedraw ,才會恢復繪制 Table。上面的代碼只是用于演示,實際上增加 500行最簡單的代碼是:DataTables("訂單").AddNew(500)屬性屬性名說明Type整數(shù)型,返回一個整數(shù),表示 DataTable的類型Name字符型,返回DataTable的名稱Caption字符型,返回DataTable的標題HasChanges邏輯型,判斷DataTable的數(shù)據(jù)是否已經(jīng)被修改AllowEdit邏輯型,是否允許用戶修改表中數(shù)據(jù)AllowAddNew邏輯型,是否允許用戶增加

54、行AllowClipBoard邏輯型,是否允許復制粘貼數(shù)據(jù)AllowCopyHeader邏輯型,復制數(shù)據(jù)的時候是否包括列名AllowInitialize邏輯型,是否允許初始化此表AutoAddNew邏輯型,是否自動增加行AllowDelete邏輯型,是否允許用戶刪除行AllowLockRow邏輯型,是否允許用戶鎖定行AllowUnlockRow邏輯型,是否允許用戶取消鎖定行AllowDragColumn邏輯型,是否允許通過拖動列標題來調整列位置AllowFreezeColumn邏輯型,是否允許通過鼠標拖動來調整凍結區(qū)AllowResizeColumn邏輯型,是否允許通過鼠標拖動來調整列寬All

55、owResizeRow邏輯型,是否允許通過鼠標拖動來調整行高AllowResizeSingleRow邏輯型,是否允許單獨調整某一行的高度EnterKeyActionDown邏輯型,按回車鍵是否向卜移到另一單兀格TabKeyActionDown邏輯型,按Tab鍵是否向卜移到另一單兀格MultiRowHeader邏輯型,是否啟用多層表頭。ConnectionName字符型,返回數(shù)據(jù)源名稱。FillLoadTimeOut整數(shù)型,設置加載數(shù)據(jù)時的超時時限,默認30秒,一般不需要設置此屬性。SourceType整數(shù)型,返回數(shù)據(jù)源的類型,1表示Access, 2表示SQL Server,3 表小 Orac

56、le。方法方法說明AddNew在DataTable中增加一行,并返回所增加的行Compute根據(jù)指定的條件計算指定的內容Find在DataTable查找符合條件的行,如果找到的話,返回 Nothing返回找到的行,否則Select以集合的形式,返回所有符合指定條件的行Save保存數(shù)據(jù)ReplaceFor找出符合條件的行,并將指定列的內容替換為指定值DeleteFor刪除符合條件的行RemoveFor移除符合條件的行RejectChanges撤銷自打開文件或最次保存以來,對該表做出的修改。AcceptChanges接受所有修改結果,使得這些修改不被保存。GetValues從指定列中,獲取不重復的

57、值,以集合的形式返回。GetUniqueValues從指定列中,獲取不重復的值,以集合的形式返回(此方法已經(jīng)被GetValues取代,請不要再使用)GetComboListString從指定的列中提取不重復的值,用符號"|"將這些值連接成一個字符串,并返回這個字符串ResumeRedraw恢復繪制表格StopRedraw暫停繪制表格BuildHeader重新生成表頭AddUserStyle增加自定義樣式下表的屬性和方法可以暫時忽略,這些是和動態(tài)加載相關的屬性和方法,將在動態(tài)加載 這一章專門講述:名稱說明LoadFilter屬性字符型,用于設置重新加載數(shù)據(jù)的條件表達式,語法和

58、所 使用的數(shù)據(jù)源有關。LoadOrder屬性字符型,指定加載數(shù)據(jù)的順序。_LoadTop屬性字符型,指定要加載的行數(shù),如果是分頁加載,則用于指 定每頁的行數(shù)。LoadReverse屬性邏輯型,是否反向加載,即是否先加載新數(shù)據(jù),此屬性只 后在分頁加載的時候才有效。LoadOver屬性字符型,用于指定分頁加載依據(jù)列。LoadPage屬性整數(shù)型,指定要加載的頁號TotalPages屬性整數(shù)型,返回分頁加載時,總的可加載總頁數(shù)Load方法加載數(shù)據(jù)SQLLoad方法根據(jù)指定的SQL語句加載數(shù)據(jù)JAppendLoad方法追載符合條件的新數(shù)據(jù)LoadChildren方法加載指定子表的數(shù)據(jù),且只加載那些父表已

59、經(jīng)存在對應行 的子表數(shù)據(jù)。SQLCompute方法計算后臺所有數(shù)據(jù)SQLReplaceFor方法批量更新后臺數(shù)SQLDeleteFor方法批量刪除后臺數(shù)據(jù)SQLSelect方法從后臺查詢數(shù)據(jù)SQLUpdate方法保存通過SQLSelect查詢得到的數(shù)據(jù)SQLFind方法從后臺查找數(shù)據(jù)SQLGetValues方法從后臺的指定列中提取不重復值,以集合的形式返回SQLGetComboListString方法從后臺的指定的列中提取不重復的值,用符號"|"將這些值連接成一個字符串,并返回這個字符串關于 DataTables前面我們已經(jīng)通過 DataTables集合,引用指定名稱的Da

60、taTable ,例如:DataTables("產(chǎn)品").Save()DataTables("訂單").AllowEdit = False既然是集合,我們就可以通過For Each語句遍歷集合中所有元素。例如下面的代碼,列出所有 DataTable的名稱:For Each dt As DataTable In DataTablesOutput.Show(dt.Name)NextDataTables 的屬性:Count用于返回DataTable的數(shù)量。AllowEdit是否允許編輯數(shù)據(jù)。默認為True,如果將此屬性設為False,將鎖定所有 DataTab

61、le,相當于單擊菜單中的“查閱模式”按鈕。例如:Output.Show("總表數(shù):"& DataTables.Count)DataTables.AllowEdit = False '鎖定所有表,進入查閱模式DataTables.AllowEdit = True只有DataTables和DataTable的AllowEdit屬性都為 True的情況下,我們才能夠在 DataTable 中輸入數(shù)據(jù)。DataTables 的方法:Save保存所有表,等同于單擊菜單中的“保存”按鈕。Contains判斷是否存在指定名稱的DataTable,如果存在,則返回 True,否則返回FalseRejectChanges撤銷自打開文件或最近一次保存以來的全部修改。Load加載表,這個方法的使用會在動態(tài)加載這一章進行介

溫馨提示

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

評論

0/150

提交評論