FOXTABLE编程_第1页
FOXTABLE编程_第2页
FOXTABLE编程_第3页
FOXTABLE编程_第4页
FOXTABLE编程_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据绑定最简单的绑定首先还是打开我们的示例文件专业报表.Table ';然后在命令窗口执行下面的代码:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables("订单")将 rt 绑定到订单表rt.Text= "Fields!产品.Value"'设置打印字段doc.body.Children.Add(rt)doc.Preview()上述代码会打印出订单表中每一行的产品名称。DataBinding用于设置打印对象的绑定属

2、性,该属性包括一些子属性,DataSource表示数据来源,数据来源可以是Table,还可以是数组或者集合。需要注意的是,不能直接绑定到 Table,如果要绑定到 Table,必须用BindTables来设置,例 如:rt.DataBinding.DataSource = BindTables("订单")如果对象的内容来自于某一列,其Text属性的设置格式如下:Fields!列名称.Value使用表达式在命令窗口执行下面的代码:Dim doc As New PrintDocDim rt As New prt.RenderTextrt.DataBinding.DataSour

3、ce = BindTables("订单")将 rt 绑定到订单表rt.Text= "Math.Round(Fields!金额.Value,1)”'设置打印表达式doc.body.Children.Add(rt)doc.Preview()留意方括号中的内容:Math.Round(Fields!金额.Value,1)意思是打印的时候将金额列的内容,保留一位小数,你可以在Text属性中使用Foxtable支持的所有函数。 注意表达式必须用方括号括起来。日期的打印为了得到常规的日期格式,可以利用 Format格式化日期数据:Dim doc As New Print

4、DocDim rt As New prt.RenderTextrt.DataBinding.DataSource = BindTables("订单")将 rt 绑定到订单表rt.Text= "Format(Fields!日期.Value,""yyyy-MM-dd"")"doc.body.Children.Add(rt)doc.Preview()要记得对于字符串中的每一个双引号,都必须用两个双引号来表示。在命令窗口执行下面的代码:绑定多个字段为了打印出订单表中的日期和数量,在命令窗口执行下面的代码:需要使用容器(Re

5、nderArea),将原来的打印对象加入到容器中,这些打印对象不再需要设置 绑定,只需为容器设置绑定即可。例如: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.Add(rt)'将打印对象添加到容

6、器中rt = New prt.RenderTextrt.Text= "Fields!数量.Value"ra.Children.Add(rt)doc.body.Children.Add(ra)doc.Preview()上述的代码将依次打印每一个订单的日期和数量。打印标签有了绑定,打印标签比以前更简单。示例Dim doc As New PrintDoc '定义一个报表Doc.Stacking = prt.StackingRulesEnum.InlineLeftToRightDim ra As New prt.RenderAreaDim rt As prt.RenderT

7、extra.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.Style.Borders.All = New p

8、rt.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 ="部门:Fields!部门.Value"ra.Child

9、ren.Add(rt)'添加到容器中rt = New prt.RenderTextrt.Text ="职务:Fields!职务.Value"ra.Children.Add(rt)'添加到容器中Doc.Preview()'预览报表表格与绑定行组也可以设置绑定,这样我们可以很方便地将一个表格绑定到数据表。例如,打印订单表中的某些列,代码非常简单:Dim doc As New PrintDocDim rt As New prt.RenderTableDim tb as Table = Tables("订单")Dim ColNames A

10、s String() = New String()" 产品","客户","单价","数量","金额"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!" & ColNames(c) & ".Valu

11、e"' 设置绑定表达式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(rt)doc.Preview()注意这一行代码:r

12、t.RowGroups(1,1).DataBinding.DataSource = BindTables("订单")'将第二行绑定到订单表该行代码将表格的第二行绑定到订单表,这样第二行将根据订单表中的每一行数据,自动生成副本,完成整个表格的打印。FOXtable编程基本概念DataTable 和 TableFoxtable中有一个集合 DataTables,通过该集合可以获得指定名称的表,例如:DataTables("产品")'产品表DataTables("客户")'客户表DataTables("订单

13、")'订单表实际上你是看不到 DataTable的,你看到的是Table,也就是说,上面的三个图,实际上就是 三个Table。那么什么是Table呢?你可以这样理解,DataTable就像一个仓库,所有从数据文件中加载的 数据,都存放在这里,而且这个仓库是不直接面对用户的;而Table就像一个展厅,是负责和用户打交道的,这个展厅 (Table)从仓库(DataTable)中取得数据,并呈现给用户。同样,Foxtable中也有一个集合 Tables,通过该集合可以获得指定名称的 Table,在没有建立 关联的情况下,我们这个简化的订单管理系统包括三个Table,分别是:Tabl

14、es("产品")Tables("客户")Tables("订单")在初始的,f#况下,Table会从DataTable中提取所有数据呈现给用户,如果你设置了筛选条件, Table就会从DataTable提取符合筛选条件的数据,然后呈现给用户。例如订单表有1000行数据,那么DataTables("订单”)从头至ij尾,始终都会有 1000行数据, 不受筛选的影响。而 Tables("订单")去口不一样,如果没有进行筛选,那么Tables("订单")也会包括所有数据,也就是 1000行数据

15、全部可见。如果现在从中筛选出产品为PD01的订单,且PD01的订单是200个,那么经过筛选后,Tables("订单”)会包括200行数据,也就是你看 到的那200个产品为PD01的订单。所以关于DataTable和Table的关系,较为完整的描述是:从数据文件加载到 Foxtable中的数据,是存放在 DataTable中的,它就像一个仓库,不直接 面对用户;而 Table就像一个展厅,是负责和用户打交道的,它根据指令从仓库(DataTable)中提取符合条件的数据,然后呈现给用户;通过菜单进行的日常数据管理工作,例如增加行、删除行、排序、筛选、汇总等等,都是在 Table中进行的;

16、除了编程,用户没有办法直接对 DataTable进行操作,因为它是不可见的。在任何时候,DataTable都包括所有已经加载的行。Table中的行,既可以排序,也可以筛选,所有 Table中行的数量和顺序都是可变化的,我 们平时所看到的、所操作的,都是 Table中的行。我们在Table中进行的任何操作,最终都会反映到DataTable,例如我们通过菜单在 Table中删除行,DataTable也会删除一行。关联表和Table定在上面这个简化的订单管理系统中,我们建立如下两个关联:父表关联列产品订单产品编号客户订单客户编号因为关联的建立,DataTable和Table不再是一一对应的关系,例如

17、我选择产品表的时候,就会出现三个Table,分别是: 三个Table的作用为:Tables("产品"):主表,用于显示所有产品Tables("产品.订单"):如果在Tables("产品")中选定一个产品,这里会显示该产品的全部订单。Tables("产品.订单.客户"):如果在 Tables("产品.订单")中选定一个订单,这里会显示该订单 所属的客户。同样在选择客户表的时候,也会出现三个Table:Tables("客户")Tables("客户.订单”)Tables(

18、"客户.订单.产品")而选择订单表,出现的三个Table为:Tables("订单")Tables("订单产品")Tables("订单.客户")由此我们可以看出,同一个DataTable可以有多个Table,例如下面三个 Table:Tables("产品")Tables("订单产品")Tables("客户.订单产品")它们的数据全部来自于DataTables("产品")。由此可见,DataTable的数量是固定的,而 Table的数量会随

19、着关联的增加而增加,同一个DataTable可以有多个 Table,每个Table都各取所需地从 DataTable中提取数据呈现给用户。DataTable 概述通过DataTables集合,可以获得指定名称的 例如:Dim dt As DataTabledt = DataTables("订单")DataCol 表示 DataTable 中的列。通过DataCols集合,可以获得指定名称的 例如:Dim dt As DataTable = DataTables("订单") Dim dc As DataCol = dt.DataCols("日期&

20、quot;) DataRow 表示 DataTable 中的行。通过DataRows集合,可以获得某一位置的DataTable(表)。DataCol(列)。DataRow(行)。例如:Dim dr As DataRow1表示第二行。dr = DataTables("订单").DataRows(0) 行是从0开始编号的,所以0表示第一行, 通过列名称,我们可以得到或设置某一行指定列的内容。 例如:Dim r As DataRowDim v As Double构成了表、行、列这样一个完整的结构体系,接r = DataTables("订单").DataRows

21、(0) r("数量")=100 v = r("折扣") 由此可知,DataTable、DataRow、DataCol 下来我们具体介绍这三个对象。DataTable常用属性通过DataTables集合,可以获得指定名称的DataTable(表)。例如:Dim dt As DataTabledt = DataTables("订单")如果要禁止编辑某个DataTable,只需将其AllowEdit属性设为False,例如:DataTables("订单").AllowEdit = False在命令窗口执行上述代码,你会发

22、现订单表的左上角出现一个锁形标记,表示此表已经被锁定,不能在其中输入数据。如果你要取消锁定表,只需将其AllowEdit属性重新设为True:DataTables("订单").AllowEdit = True卜表列出了 DataTable的常用设置属性,它们的用法和 AllowEdit属性完全一样:属性名说明AllowEdit是否允许修改表中数据AllowAddNew是否允许增加行AllowClipBoard是否允许复制粘贴数据AllowInitialize是否允许初始化此表AutoAddNew是否允许自动增加行,也就是在最舟-行的最舟-个单兀格按回车键时, 是否自动增加一

23、行AllowDelete是否允许删除行AllowLockRow是否允许锁定行AllowUnlockRow是否允许取消锁定行我们在编辑数据的时候,如果按回车键或Tab键,光标会向右移到下一单元格,通过下面的属性,你可以改变这种默认的光标移动方式:属性名EnterKeyActionDown说明按回车键是否向下移到另一单兀格TabKeyActionDown按Tab键是否向卜移到另一单兀格例如你希望按回车键向下移动光标,而不是向右移动,只需将 EnterKeyActionDown属性设为True即可:DataTables("订单").EnterKeyActionDown = Tru

24、e最后三个常用的属性为:属性名说明Name返回DataTable的名称Type返回一个整数,表7K DataTable的类型:1内部数据表2内部查询表3外部数据表4外部查询表5临时表HasChanges逻辑型,判断DataTable的数据是否已经被修改例如执行下面的代码,将列出所有已经修改过的DataTable:Output.Show("已经修改的数据表:”)For Each dt As DataTable In DataTablesIf dt.Type = 1 Orelse dt.Type = 3 ThenIf dt.HasChanges ThenOutput.Show(dt.Na

25、me)End IfEnd IfNextDataTable常用方法AddNew在DataTable中增加一行或多行,并返回所增加的第一行。AddNew()AddNew(Count)Count:可选参数,要增加的行数,如果省略,则只增加一行。 例如:Dim dr As DataRowdr = DataTables("订单").AddNew()dr("日期")=Date.Today '将新增行的日期设为当天日期。其实我们很少直接向DataTable增加行,更多的时候,我们是向Table中增加行,原因以后会讲述。Save保存数据。语法:Save()Sav

26、e(Setting)Setting:可选参数,是否保存设置。例如单单保存数据:DataTables("订单").Save()同时保存数据和设置:DataTables("订单").Save(True)保存设置比较耗时,会影响保存速度。菜单中的保存命令是同时保存数据和设置的。如果你学会了设计菜单或窗口,你可以自己设计一个保存按钮,将其代码设为:For Each dt As DataTable In DataTablesdt.Save()Next这样单击这个按钮就能保存所有表,但是不会保存设置;对于一个成熟的、已经交付使用的项目,有时是没有必要保存设置的。Ge

27、tValues从指定列中,获取不重复的值,以集合的形式返回。语法:GetValues(ColumnName,Filter,Sort)ColumnName :列名称,从此列中提取不重复的值。Filter:可选参数,指定一个条件表达式,只返回符合此条件的值;请参考表达式的 运算符和函数和条件表达式Sort:可选参数,指定排序列,如果省略,则根据取值列排序,通常无需设置。示例一列出产品表中所有的产品名称:Dim Products As List(Of String)Products = DataTables("产品").GetValues("产品名称")For

28、 Each Product As String In ProductsOutput.Show(Product)Next示例二返回的值默认按照取值列排序,我们可以另外指定排序列;例如按产品编号顺序,列出产品表中所有的产品名称:Dim Products As List(Of String)Products = DataTables("产品").GetValues("产品名称","","产品编号")For Each Product As String In ProductsOutput.Show(Product)Next

29、示例三给排序列加上 DESC关键词,返回值可以降序排序,例如按最近一次订货的日期顺序,列 出订单表中的客户名单:Dim Customers As List(Of String)Customers = DataTables("订单").GetValues("客户","","日期 Desc")For Each Customer As String In CustomersOutput.Show(Customer)Next示例四可以设置取值条件,列出产品表中单价大于100的产品:Dim Products As List(

30、Of String)Products = DataTables("产品").GetValues("产品名称","单价 > 100")For Each Product As String In ProductsOutput.Show(Product)Next示例五可以同时设置取值条件和排序列,例如按日期顺序,列出 2012年6月1日后订购过PD01 产品的客户名单:Dim Customers As List(Of String)Customers = DataTables("订单").GetValues(&qu

31、ot;客户","产品='PD01' And 日期> #6/1/2012#",” 日期")For Each Customer As String In CustomersOutput.Show(Customer)Next示例六下面这个例子,一般用户客户忽略。可以同时从多列提取不重复的值,此时返回的不是字符的集合,而是字符数组的集合。 例如从客户列和产品列提取不重复的值:'定义数组集合的时候,要在类型后加上括号,表示这是一个数组集合。Dim Arys As List(Of String()Arys = DataTables(&q

32、uot;订单").GetValues("产品 客户")列名用符号|分害U'注意循环变量是字符型数组,所以类型是String(),而不是StringFor Each Ary As String() In ArysOutput.Show(Ary(0) & "|" & Ary(1)Next上面的代码是从客户和产品两列提取不重复的值,返回的不是一个字符集合,而是一个字符数组集合,每个数组包括两个元素,第一个元素是客户值,第二个元素是产品值。GetComboListString从指定的列中提取不重复的值,用符号"|&qu

33、ot;将这些值连接成一个字符串,并返回这个字符串。此方法通常用于动态设置列表项目。语法:GetComboListString(ColumnName , Filter, Sort)ColumnName :列名称,从此列中提取不重复的值。Filter:可选参数,指定一个条件表达式,只返回符合此条件的值。Sort:可选参数,指定排序列,如果省略,则根据取值列排序,通常无需设置。请参考表达式的 运算符和函数 和 条件表达式 示例一列出订单表所有的客户:Dim s As String = DataTables("订单").GetComboListString("客户&quo

34、t;) output.show(s) 示例二返回的值默认按取值列排序,可以另外指定排序列,例如按产品编号顺序,列出产品表中所有的产品名称:Dim s As String = DataTables("产品").GetComboListString("产品名称","","产品编号") output.show(s) 示例三可以给排序列加上关键词,例如按最近一次订货的日期顺序,列出订单表中的客户名单:Dim s As String = DataTables("订单").GetComboListStrin

35、g("客户","","日期 Desc") Output.Show(s) 实例四可以设置取值条件,例如从客户表中提取华北地区的客户名单:Dim s As Strings = DataTables("客户").GetComboListString("客户名称","地区='华北"') Output.Show(s)示例五可以同时设置取值条件和排序列,例如按日期顺序,列出 2012年6月1日后订购过PD01 产品的客户名单:Dim s As Strings = Data

36、Tables("订单").GetComboListString("客户","产品='PD01' And 日期> #6/1/2012#"," 日期")Output.Show(s)Compute根据条件统计表中数据。语法:Compute(Expression, Filter)Expression:要计算的表达式,使用聚合函数进行统计。Filter : 可选参数,用于设置计算条件,请参考表达式的运算符和函数 和条件表达式。在执行以下示例之前,请打开CaseStudy目录下的示例文件"统计演

37、示.Table"。示例一计算总的销售数量和金额:Dim Total As IntegerDim Amount As DoubleWith DataTables("订单")Total = .Compute("Sum(数量)”)Amount = .Compute("Sum(金额)")End WithOutput.Show("数量:"& Total)Output.Show("金额:"& Amount)示例二计算产品PD01的销售数量:Dim Total As LongTotal = D

38、ataTables("订单").Compute("Sum(数量)","产品 ='PD01'")Output.Show(Total)实例三统计雇员EP01成交的订购数量超过500的订单数:Dim cnt As Integercnt = DataTables("订单").Compute("Count(客户)”,"雇员 ='EP01' And 数量 > 500")Output.Show("订单数:"& cnt)示例四计算每个客

39、户的订购数量:Dim 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(数量)","客户='"& Customer & ""')Output.Show(Customer

40、 & ":" & Total)Next上述代码中,Filter参数分成了三部分,各部分用运算符&连接起来:"客户='"& Customer & 皿如果客户名称为 CS01,那么三部分组合后,Filter参数就等于:"客户='CS01'"通过代码动态合成条件表达式,是一种基本的技能,大家务必要掌握。参考:GetValuesFind在DataTable查找符合条件的行,如果找到的话,返回找到的行,否则返回Nothing o如果有多个符合条件的行,默认返回第一个,也可以指定返回

41、第几个符合条件的行。 语法:Find(Filter,Sort,Index)Filter:条件表达式,请参考表达式的运算符和函数 和条件表达式。Sort:可选参数,指定排序方式。Index:可选参数,指定返回第几个符合条件的行,0表示第一行。示例一:Dim dr As DataRowdr = DataTables("产品").Find("产品编号 ='03'")'找出编号为 03的产品 With DataTables("订单”)dr = .Find("产品='PD01二"日期")找出第

42、一次订购 PD01产品的记录dr =.Find("产品='PD01二"日期",1)'找出第二次订购 PD01产品的记录 End With 示例二:有的时候,我们需要查找倒数第几行数据,例如最近一次订购某产品的记录。 可以参考下面的代码:Dim dr As DataRowWith DataTables("订单”)dr =.Find("产品='PD01二"日期Desc")'找出最后一次订购 PD01产品的记录dr =.Find("产品='PD01二”日期 Desc",1

43、)'找出倒数第二次订购 PD01产品的记录 End With 可以看到代码和原来几乎一样,唯一的变化是排序参数,被改为:日期Desc加上DESC使得日期按照降序排序,最后的日期排在最前面,我们所找出的第一条记录, 就是最后一次订购产品PD01的记录。示例三通常应该在代码中判断是否找到了符合条件的行,然后再运行后续的代码。例如要找出最近一次订购产品数量超过1000的订单,并显示订单的日期和客户:Dim dr As DataRowdr = DataTables("订单").Find("数量 > 1000","日期 Desc"

44、)If dr IsNot Nothing Then '如果找到的话Output.Show("日期:"& dr("日期")Output.Show("客户:"& dr("客户") End If 如果我们不加上判断,直接: Dim dr As DataRowdr = DataTables("订单").Find("数量 > 1000","日期 Desc")Output.Show("日期:"& dr(&quo

45、t;日期")Output.Show("客户:"& dr("客户")一旦订单表并不存在订购数量超过1000的订单,那么Find方法返回Nothing ,导致后续代码运行出错。Find函数只能找出一条符合条件的行,如果要同时找出所有符合条件的行,可以使用Select方法。Select以集合的形式,返回所有符合指定条件的行。语法:Select(Filter)Select(Filter,Sort)Filter:条件表达式,请参考表达式的运算符和函数 和条件表达式。Sort:可选参数,指定排序方式我们经常需要对符合某一条件的记录,统一进行处理,此

46、时 Select方法就派上用场了。示例一例如,对于1999年1月4日订购PD01的订单,希望将其折扣统一设置为0.12,代码为:Dim drs As List(Of DataRow)drs = DataTables("订单").Select("产品='PD01' And 日期尸 #1/4/1999#")For Each dr As Datarow In drsdr("折扣")=0.12Next示例二再例如,希望列出1999年1月4日订购PD01的客户,按订购的数量排序:Dim drs As List(Of DataRo

47、w)drs = DataTables("订单").Select("产品='PD01' And 日期尸 #1/4/1999#","数量 DESC")For Each dr As Datarow In drsOutput.show(dr("客户")Next上面的代码将Sort参数设置为“数量 DESC”,这样返回的行不仅按数量排序,而且数量多 的行排在前面。示例三Filter参数不能省略,如果希望返回所有行,将 Filter参数设置为""即可。例如希望按总分高低,依次显示所有学生的姓

48、名:For Each dr As DataRow In DataTables("成绩表").Select("","总分 DESC")Output.Show(dr("姓名")NextDeleteFor删除符合条件的行。语法:DeleteFor(Filter)运算符和函数和条件表达式Filter: 一个表达式,用于指定删除条件,请参考表达式的 例如: 删除订单表中2007年2月1日以前的行,代码为:DataTables("订单").DeleteFor("日期 #2/1/2007#"

49、;)RemoveFor移除符合条件的行。所谓移除行,只是让用户再也看不到这些被移除的行,就像这些行从来没有被加载过一样;移除行从来都不会真正从文件中删除行,重新打开文件后,被移除的行将再次出现。语法:RemoveFor(Filter)Filter:指定移除条件。请参考表达式的运算符和函数 和 条件表达式。例如:DataTables("订单").RemoveFor("产品='PD01'ReplaceFor找出符合条件的行,并将指定列的内容替换为指定值。语法:ReplaceFor(DataColName,V alue,Filter)DataColNam

50、e :替换的列Value:替换值Filter :替换条件,请参考表达式的 运算符和函数 和 条件表达式。例如将订单表中,订购数量大于600的订单的折扣设为 0.15,只需简单的一行代码即可:DataTables("订单").ReplaceFor("折扣",0.15,"数量 600")如果不用ReplaceFor,最精简的代码也是:For Each dr As DataRow in DataTables("订单").Select("数量 600")dr("折扣")=0.15Ne

51、xtRejectChanges撤销自打开文件或最近一次保存以来,对该表做出的修改。示例撤销表A的修改:DataTables("表 A").RejectChanges()StopRedraw我们对表做的任何变动,例如编辑数据、增加行、删除行、调整行高列宽,都会导致Table重新绘制,以便显示变动后的结果。如果要对DataTable连续地进行大量的操作,为了避免相关Table(表)不停地闪烁,可以先执行StopRedraw方法禁止绘制表,操作完成后再执行ResumeRedraw方法重新绘制表。StopRedraw方法会禁止绘制所有基于该DataTable的Table,直到执行

52、ResumeRedraw方法恢复绘制。例如我们要在订单表中增加500行,代码如下:With DataTables("订单").StopRedrawFor i As Integer = 1 To 500.AddNew()Next.ResumeRedrawEnd With注意最后一定要记得执行ResumeRedraw方法,否则表格不会再刷新。如果你将代码修改为:With DataTables("订单")For i As Integer = 1 To 500.AddNew()NextEnd With你可以看到代码执行过程中会不停地闪烁,而且执行速度也比之前慢很

53、多。StopRedraw和ResumeRedraw必须配对执行,如果执行了两次StopRedraw,那么对应的就必须执行两次 ResumeRedraw,才会恢复绘制 Table。上面的代码只是用于演示,实际上增加500行最简单的代码是:DataTables("订单").AddNew(500)属性属性名说明Type整数型,返回一个整数,表示 DataTable的类型Name字符型,返回DataTable的名称Caption字符型,返回DataTable的标题HasChanges逻辑型,判断DataTable的数据是否已经被修改AllowEdit逻辑型,是否允许用户修改表中数据

54、AllowAddNew逻辑型,是否允许用户增加行AllowClipBoard逻辑型,是否允许复制粘贴数据AllowCopyHeader逻辑型,复制数据的时候是否包括列名AllowInitialize逻辑型,是否允许初始化此表AutoAddNew逻辑型,是否自动增加行AllowDelete逻辑型,是否允许用户删除行AllowLockRow逻辑型,是否允许用户锁定行AllowUnlockRow逻辑型,是否允许用户取消锁定行AllowDragColumn逻辑型,是否允许通过拖动列标题来调整列位置AllowFreezeColumn逻辑型,是否允许通过鼠标拖动来调整冻结区AllowResizeColum

55、n逻辑型,是否允许通过鼠标拖动来调整列宽AllowResizeRow逻辑型,是否允许通过鼠标拖动来调整行高AllowResizeSingleRow逻辑型,是否允许单独调整某一行的高度EnterKeyActionDown逻辑型,按回车键是否向下移到另一单兀格TabKeyActionDown逻辑型,按Tab键是否向下移到另一单兀格MultiRowHeader逻辑型,是否启用多层表头。ConnectionName字符型,返回数据源名称。FillLoadTimeOut整数型,设置加载数据时的超时时限,默认30秒,一般不需要设置此属性。SourceType整数型,返回数据源的类型,1表示Access,

56、2表7K SQL Server,3 表小 Oracle。方法方法说明AddNew在DataTable中增加一行,并返回所增加的行Compute根据指定的条件计算指定的内容Find在DataTable查找符合条件的行,如果找到的话,返回找到的行,否则返回 NothingSelect以集合的形式,返回所有符合指定条件的行Save保存数据ReplaceFor找出符合条件的行,并将指定列的内容替换为指定值DeleteFor删除符合条件的行RemoveFor移除符合条件的行RejectChanges撤销自打开文件或最次保存以来,对该表做出的修改。AcceptChanges接受所有修改结果,使得这些修改不

57、被保存。GetValues从指定列中,获取不重复的值,以集合的形式返回。GetUniqueValues从指定列中,获取不重复的值,以集合的形式返回(此方法已经被GetValues取代,请不要再使用)GetComboListString从指定的列中提取不重复的值,用符号"|"将这些值连接成一个字符串,并返回这个字符串ResumeRedraw恢复绘制表格StopRedraw暂停绘制表格BuildHeader重新生成表头AddUserStyle增加自定义样式卜表的属性和方法可以暂时忽略,这些是和动态加载相关的属性和方法,将在动态加载这一章专门讲述:名称说明LoadFilter属性

58、字符型,用于设置重新加载数据的条件表达式,语法和所 使用的数据源有关。LoadOrder属性字符型,指定加载数据的顺序。LoadTop属性字符型,指定要加载的行数,如果是分页加载,则用于指 定每页的行数。LoadReverse属性逻辑型,是否反向加载,即是否先加载新数据,此属性只 后在分页加载的时候才有效。LoadOver属性字符型,用于指定分页加载依据列。LoadPage属性整数型,指定要加载的页号TotalPages属性整数型,返回分页加载时,总的可加载总页数Load方法加载数据SQLLoad方法根据指定的SQL语句加载数据AppendLoad方法追载符合条件的新数据LoadChildre

59、n方法加载指定子表的数据,且只加载那些父表已经存在对应行 的子表数据。SQLCompute方法计算后台所有数据SQLReplaceFor方法批量更新后台数SQLDeleteFor方法批量删除后台数据SQLSelect方法从后台查询数据SQLUpdate方法保存通过SQLSelect查询得到的数据SQLFind方法从后台查找数据SQLGetValues方法从后台的指定列中提取不重复值,以集合的形式返回SQLGetComboListString方法从后台的指定的列中提取不重复的值,用符号"|"将这些值连接成一个字符串,并返回这个字符串关于 DataTables前面我们已经通过

60、DataTables集合,引用指定名称的DataTable,例如:DataTables("产品").Save()DataTables("订单").AllowEdit = False既然是集合,我们就可以通过For Each语句遍历集合中所有元素。例如下面的代码,列出所有 DataTable的名称:For Each dt As DataTable In DataTablesOutput.Show(dt.Name)NextDataTables 的属性:Count用于返回DataTable的数量。AllowEdit是否允许编辑数据。默认为True,如果将此属性

61、设为False,将锁定所有DataTable,相当于单击菜单中的“查阅模式”按钮。例如:Output.Show("总表数:"& DataTables.Count)DataTables.AllowEdit = False '锁定所有表,进入查阅模式DataTables.AllowEdit = True只有DataTables和DataTable的AllowEdit属性都为 True的情况下,我们才能够在 DataTable 中输入数据。DataTables 的方法:Save保存所有表,等同于单击菜单中的“保存”按钮。Contains判断是否存在指定名称的DataTable,如果存在,则返回True,否则返回FalseRejectChanges撤销自打开文件或最近一次保

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论