数据绑定
最简单的绑定
首先还是打开我们的示例文件“专业报表.Table”,然后在命令窗口执行下面的代码: Dim doc As New PrintDoc Dim rt As New prt.RenderText
rt.DataBinding.DataSource = BindTables(\订单\将rt绑定到订单表 rt.Text= \产品.Value]\设置打印字段 doc.body.Children.Add(rt) doc.Preview()
上述代码会打印出订单表中每一行的产品名称。
DataBinding用于设置打印对象的绑定属性,该属性包括一些子属性,DataSource表示数据来源,数据来源可以是Table,还可以是数组或者集合。
需要注意的是,不能直接绑定到Table,如果要绑定到Table,必须用BindTables来设置,例如:
rt.DataBinding.DataSource = BindTables(\订单\
如果对象的内容来自于某一列,其Text属性的设置格式如下: [Fields!列名称.Value]
使用表达式
在命令窗口执行下面的代码: Dim doc As New PrintDoc Dim rt As New prt.RenderText
rt.DataBinding.DataSource = BindTables(\订单\将rt绑定到订单表 rt.Text= \金额.Value,1)]\设置打印表达式 doc.body.Children.Add(rt) doc.Preview()
留意方括号中的内容:
Math.Round(Fields!金额.Value,1)
意思是打印的时候将金额列的内容,保留一位小数,你可以在Text属性中使用Foxtable支持的所有函数。
注意表达式必须用方括号括起来。
日期的打印
为了得到常规的日期格式,可以利用Format格式化日期数据: Dim doc As New PrintDoc Dim rt As New prt.RenderText
rt.DataBinding.DataSource = BindTables(\订单\将rt绑定到订单表 rt.Text= \日期.Value,\ doc.body.Children.Add(rt) doc.Preview()
要记得对于字符串中的每一个双引号,都必须用两个双引号来表示。
在命令窗口执行下面的代码:
绑定多个字段
为了打印出订单表中的日期和数量,在命令窗口执行下面的代码:
需要使用容器(RenderArea),将原来的打印对象加入到容器中,这些打印对象不再需要设置绑定,只需为容器设置绑定即可。 例如:
Dim doc As New PrintDoc Dim rt As New prt.RenderText Dim ra As New prt.RenderArea ra.Style.Spacing.Bottom = 2
ra.DataBinding.DataSource = BindTables(\订单\将容器绑定到订单表 rt.Text = \日期.Value]\
ra.Children.Add(rt) '将打印对象添加到容器中 rt = New prt.RenderText
rt.Text= \数量.Value]\ ra.Children.Add(rt)
doc.body.Children.Add(ra) doc.Preview()
上述的代码将依次打印每一个订单的日期和数量。
打印标签
有了绑定,打印标签比以前更简单。 示例
Dim doc As New PrintDoc '定义一个报表
Doc.Stacking = prt.StackingRulesEnum.InlineLeftToRight Dim ra As New prt.RenderArea Dim rt As prt.RenderText ra.Width = 40 '设置标签宽度
ra.SplitHorzBehavior = prt.SplitBehaviorEnum.Never '禁止水平分割 ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never '禁止垂直分割 ra.Style.Spacing.Right = 2 '设置标签之间的所有和上下间隔为2毫米 ra.Style.Spacing.Bottom = 2
ra.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.RenderText
rt.Text = \姓名:[Fields!姓名.Value]\ra.Children.Add(rt) '添加到容器中 rt = New prt.RenderText
rt.Text = \部门:[Fields!部门.Value]\ra.Children.Add(rt) '添加到容器中 rt = New prt.RenderText
rt.Text = \职务:[Fields!职务.Value]\ra.Children.Add(rt) '添加到容器中 Doc.Preview() '预览报表
表格与绑定
行组也可以设置绑定,这样我们可以很方便地将一个表格绑定到数据表。 例如,打印订单表中的某些列,代码非常简单: Dim doc As New PrintDoc
Dim rt As New prt.RenderTable Dim tb 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 = \设置绑定表达式 Next
rt.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()
注意这一行代码:
rt.RowGroups(1,1).DataBinding.DataSource = BindTables(\订单\将第二行绑定到订单表
该行代码将表格的第二行绑定到订单表,这样第二行将根据订单表中的每一行数据,自动生成副本,完成整个表格的打印。 FOXtable编程基本概念
DataTable和Table
Foxtable中有一个集合DataTables,通过该集合可以获得指定名称的表,例如: DataTables(\产品\'产品表 DataTables(\客户\'客户表 DataTables(\订单\'订单表
实际上你是看不到DataTable的,你看到的是Table,也就是说,上面的三个图,实际上就是三个Table。
那么什么是Table呢?你可以这样理解,DataTable就像一个仓库,所有从数据文件中加载的数据,都存放在这里,而且这个仓库是不直接面对用户的;而Table就像一个展厅,是负责和用户打交道的,这个展厅(Table)从仓库(DataTable)中取得数据,并呈现给用户。
同样,Foxtable中也有一个集合Tables,通过该集合可以获得指定名称的Table,在没有建立关联的情况下,我们这个简化的订单管理系统包括三个Table,分别是: