ImageVerifierCode 换一换
格式:DOCX , 页数:51 ,大小:39.03KB ,
资源ID:7446547      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7446547.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(FOXTABLE编程.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

FOXTABLE编程.docx

1、FOXTABLE编程数据绑定最简单的绑定首先还是打开我们的示例文件“专业报表.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用于设置打印对象的绑定属性,该属性包括一些子属性,DataSource

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

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

4、ables(订单) 将rt绑定到订单表 rt.Text= Format(Fields!日期.Value,yyyy-MM-dd) doc.body.Children.Add(rt)doc.Preview()要记得对于字符串中的每一个双引号,都必须用两个双引号来表示。在命令窗口执行下面的代码:绑定多个字段为了打印出订单表中的日期和数量,在命令窗口执行下面的代码:需要使用容器(RenderArea),将原来的打印对象加入到容器中,这些打印对象不再需要设置绑定,只需为容器设置绑定即可。例如:Dim doc As New PrintDocDim rt As New prt.RenderTextDim r

5、a As New prt.RenderAreara.Style.Spacing.Bottom = 2ra.DataBinding.DataSource = BindTables(订单) 将容器绑定到订单表rt.Text = Fields!日期.Value ra.Children.Add(rt) 将打印对象添加到容器中rt = New prt.RenderTextrt.Text= Fields!数量.Value ra.Children.Add(rt)doc.body.Children.Add(ra)doc.Preview()上述的代码将依次打印每一个订单的日期和数量。打印标签有了绑定,打印标签比

6、以前更简单。示例Dim doc As New PrintDoc 定义一个报表Doc.Stacking = prt.StackingRulesEnum.InlineLeftToRightDim ra As New prt.RenderAreaDim rt As prt.RenderTextra.Width = 40 设置标签宽度ra.SplitHorzBehavior = prt.SplitBehaviorEnum.Never 禁止水平分割ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never 禁止垂直分割ra.Style.Spacing.Right

7、 = 2 设置标签之间的所有和上下间隔为2毫米ra.Style.Spacing.Bottom = 2ra.Style.Padding.All = 1 标签内容距离边框为1毫米ra.Style.Borders.All = New prt.Linedef(0.3, Color.Red) 设置边框ra.DataBinding.DataSource = BindTables(员工) 将容器绑定到员工表Doc.Body.ChildRen.Add(ra) 将容器加入到报表中 rt = New prt.RenderTextrt.Text = 姓名:Fields!姓名.Valuera.Children.Add

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

9、as Table = Tables(订单)Dim ColNames As String() = New String()产品, 客户,单价, 数量, 金额For c As integer = 0 To ColNames.Length -1 rt.Cells(0,c).Text = ColNames(c) rt.Cols(c).Width = tb.Cols(ColNames(c).PrintWidth rt.Cells(1, c).Text = Fields! & ColNames(c) & .Value 设置绑定表达式Nextrt.RowGroups(0,1).Style.TextAlign

10、Vert = 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()注意这一行代码:rt.RowGroups(1,1).DataBinding.DataSource = BindTables(订单) 将第二行绑定到订单表该行代码将表格的第二行绑定到订单表

11、,这样第二行将根据订单表中的每一行数据,自动生成副本,完成整个表格的打印。FOXtable编程基本概念DataTable和TableFoxtable中有一个集合DataTables,通过该集合可以获得指定名称的表,例如:DataTables(产品) 产品表DataTables(客户) 客户表DataTables(订单) 订单表实际上你是看不到DataTable的,你看到的是Table,也就是说,上面的三个图,实际上就是三个Table。那么什么是Table呢?你可以这样理解,DataTable就像一个仓库,所有从数据文件中加载的数据,都存放在这里,而且这个仓库是不直接面对用户的;而Table就像

12、一个展厅,是负责和用户打交道的,这个展厅(Table)从仓库(DataTable)中取得数据,并呈现给用户。同样,Foxtable中也有一个集合Tables,通过该集合可以获得指定名称的Table,在没有建立关联的情况下,我们这个简化的订单管理系统包括三个Table,分别是:Tables(产品) Tables(客户) Tables(订单) 在初始的情况下,Table会从DataTable中提取所有数据呈现给用户,如果你设置了筛选条件,Table就会从DataTable提取符合筛选条件的数据,然后呈现给用户。例如订单表有1000行数据,那么DataTables(订单)从头到尾,始终都会有1000

13、行数据,不受筛选的影响。而Tables(订单)却不一样,如果没有进行筛选,那么Tables(订单)也会包括所有数据,也就是1000行数据全部可见。如果现在从中筛选出产品为PD01的订单,且PD01的订单是200个,那么经过筛选后,Tables(订单)会包括200行数据,也就是你看到的那200个产品为PD01的订单。所以关于DataTable和Table的关系,较为完整的描述是:从数据文件加载到Foxtable中的数据,是存放在DataTable中的,它就像一个仓库,不直接面对用户;而Table就像一个展厅,是负责和用户打交道的,它根据指令从仓库(DataTable)中提取符合条件的数据,然后呈

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

15、关联列产品订单产品编号客户订单客户编号因为关联的建立,DataTable和Table不再是一一对应的关系,例如我选择产品表的时候,就会出现三个Table,分别是:三个Table的作用为:Tables(产品):主表,用于显示所有产品Tables(产品.订单):如果在Tables(产品)中选定一个产品,这里会显示该产品的全部订单。Tables(产品.订单.客户):如果在Tables(产品.订单)中选定一个订单,这里会显示该订单所属的客户。同样在选择客户表的时候,也会出现三个Table:Tables(客户)Tables(客户.订单)Tables(客户.订单.产品)而选择订单表,出现的三个Table为

16、:Tables(订单)Tables(订单.产品)Tables(订单.客户)由此我们可以看出,同一个DataTable可以有多个Table,例如下面三个Table:Tables(产品)Tables(订单.产品)Tables(客户.订单.产品)它们的数据全部来自于DataTables(产品)。由此可见,DataTable的数量是固定的,而Table的数量会随着关联的增加而增加,同一个DataTable可以有多个Table,每个Table都各取所需地从DataTable中提取数据呈现给用户。DataTable概述通过DataTables集合,可以获得指定名称的DataTable(表)。例如:Dim

17、dt As DataTabledt = DataTables(订单)DataCol表示DataTable中的列。通过DataCols集合,可以获得指定名称的DataCol(列)。例如:Dim dt As DataTable = DataTables(订单)Dim dc As DataCol = dt.DataCols(日期)DataRow表示DataTable中的行。通过DataRows集合,可以获得某一位置的DataRow(行)。例如:Dim dr As DataRowdr = DataTables(订单).DataRows(0)行是从0开始编号的,所以0表示第一行,1表示第二行。通过列名称

18、,我们可以得到或设置某一行指定列的内容。例如:Dim r As DataRowDim v As Doubler = DataTables(订单).DataRows(0)r(数量) = 100v = r(折扣)由此可知,DataTable、DataRow、DataCol构成了表、行、列这样一个完整的结构体系,接下来我们具体介绍这三个对象。DataTable常用属性通过DataTables集合,可以获得指定名称的DataTable(表)。例如:Dim dt As DataTabledt = DataTables(订单)如果要禁止编辑某个DataTable,只需将其AllowEdit属性设为Fals

19、e,例如:DataTables(订单).AllowEdit = False在命令窗口执行上述代码,你会发现订单表的左上角出现一个锁形标记,表示此表已经被锁定,不能在其中输入数据。如果你要取消锁定表,只需将其AllowEdit属性重新设为True:DataTables(订单).AllowEdit = True下表列出了DataTable的常用设置属性,它们的用法和AllowEdit属性完全一样:属性名说明AllowEdit是否允许修改表中数据AllowAddNew是否允许增加行AllowClipBoard 是否允许复制粘贴数据AllowInitialize是否允许初始化此表AutoAddNew是

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

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

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

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

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

25、put.Show(Product)Next示例二返回的值默认按照取值列排序,我们可以另外指定排序列;例如按产品编号顺序,列出产品表中所有的产品名称:Dim Products As List(Of String)Products = DataTables(产品).GetValues(产品名称,产品编号)For Each Product As String In Products Output.Show(Product)Next示例三给排序列加上DESC关键词,返回值可以降序排序,例如按最近一次订货的日期顺序,列出订单表中的客户名单:Dim Customers As List(Of String)

26、Customers = DataTables(订单).GetValues(客户,日期 Desc)For Each Customer As String In Customers Output.Show(Customer)Next示例四可以设置取值条件,列出产品表中单价大于100的产品:Dim Products As List(Of String)Products = DataTables(产品).GetValues(产品名称,单价 100)For Each Product As String In Products Output.Show(Product)Next示例五可以同时设置取值条件和排

27、序列,例如按日期顺序,列出2012年6月1日后订购过PD01产品的客户名单:Dim Customers As List(Of String)Customers = DataTables(订单).GetValues(客户,产品= PD01 And 日期 #6/1/2012#,日期)For Each Customer As String In Customers Output.Show(Customer)Next示例六下面这个例子,一般用户客户忽略。可以同时从多列提取不重复的值,此时返回的不是字符的集合,而是字符数组的集合。例如从客户列和产品列提取不重复的值:定义数组集合的时候,要在类型后加上括号

28、,表示这是一个数组集合。Dim Arys As List(Of String() Arys = DataTables(订单).GetValues(产品|客户) 列名用符号|分割注意循环变量是字符型数组,所以类型是String(),而不是StringFor Each Ary As String() In Arys Output.Show(Ary(0) & | & Ary(1) Next上面的代码是从客户和产品两列提取不重复的值,返回的不是一个字符集合,而是一个字符数组集合,每个数组包括两个元素,第一个元素是客户值,第二个元素是产品值。GetComboListString从指定的列中提取不重复的值

29、,用符号|将这些值连接成一个字符串,并返回这个字符串。此方法通常用于动态设置列表项目。语法:GetComboListString(ColumnName,Filter, Sort)ColumnName:列名称,从此列中提取不重复的值。Filter: 可选参数,指定一个条件表达式,只返回符合此条件的值。Sort: 可选参数,指定排序列,如果省略,则根据取值列排序,通常无需设置。请参考表达式的运算符和函数 和 条件表达式示例一列出订单表所有的客户:Dim s As String = DataTables(订单).GetComboListString(客户)output.show(s)示例二返回的值默认按取值列排序,可以另外指定排序列,例如按产品编号顺序,列出产品表中所有的产品名称:Dim s As String = DataTables(产品).GetComboListString(产品名称,产品编号)output.show(s)示例三可以给排序列加上关键词,例如按最近一次订货的日期顺序,列出订单表中的客户名单:Dim s As String = DataTables(订单).GetComboListString(客户,日期 Desc)Output.Show(s)实

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1