4.6.5. XTextPageInfoElement页码
页码元素类型为DCSoft.Writer.Dom.XTextPageInfoElement,它能显示当前页码和文档总页数。该类型的主要成员有:
public DCSoft.Writer.Dom.PageInfoContentType ContentType{get;set;}
显示的内容,可选值为: PageIndex:从1开始计算的页码。 NumOfPages:文档中页数。 NumOfGlobalPages:不支持。
4.6.6. 表格
DCWriter支持表格,支持表格单元格的横向合并和纵向合并,支持标题行,单元格内部可以图文混排,还支持表格套嵌表格。
可以调用编辑器命令InsertTable向文档插入表格,关于该命令可参考本文档后面的相关章节。
表格是有4种文档元素类型组成:表格元素XTextTableElement、表格行元素XTextTableRowElement、表格列元素XTextTableColumnElement和单元格类型XTextTableCellElement。
4.6.6.1. XTextTableElement类型
表格元素XTextTableElement类型表示整个表格,它常用的成员有: public XTextElementList Columns{get;} 该表格中所有的表格列对象组成的集合。 public XTextElementList Rows{get;} 该表格中所有的表格行对象组成的集合。 public XTextElementList Cells{get;}
该表格中所有的单元格组成的列表,包括被合并而隐藏的单元格。 public int NeastLevel{get;}
表格套嵌层次,文档中第一层表格的层次为1,子表格为2,再内部的子表格为3,以此类推。
public virtual XTextTableCellElement CreateCellInstance() 创建一个新的单元格对象实例。
public virtual XTextTableColumnElement CreateColumnInstance()
创建一个新的表格列对象实例。
public virtual XTextTableRowElement CreateRowInstance() 创建一个新的表格行对象实例。
当应用程序扩展DOM模型,而扩展成自己的表格模型时,可能需要扩展XTextTableColumnElement、XTextTableCellElement、XTextTableRowElement类型,而表格内部可能会自动生成表格组成元素对象实例,为了保持用户扩展的表格DOM结构的合法性,开发者需要重载XTextTableElement的CreateCellInstace、CreateColumnInstance、CreateRowIndex
方法来创建自定义的表格结构元素对象类型。
另外表格对象的Width属性和Height属性是只读的,表格的宽度和高度是由表格列和表格行的尺寸累计而出的,无法直接修改。
4.6.7. XTextTableColumnElement类型
表格列类型XTextTableColumnElement表示表格中的一个表格列,它常用的成员有: public float Width{get;set;} 表格列的宽度。 public int Index{get;}
从0开始计算的列号。
4.6.8. XTextTableRowElement类型
表格行类型XTextTableRowElement表示表格中的一个表格行,它常用的成员有: public int Index{get;} 从0开始计算的行号。 public XTextElementList Cells{get;} 该表格行包含的单元格对象,包括被合并而隐藏的单元格。 public float SpecifyHeight{get;set;}
用户指定的高度。若等于0则表格行自动设置高度,若大于0则表格行高度自动设置高度而且高度不小于用户指定的高度,若小于0则固定设置表格行的高度为用户指定的高度。 public bool HeaderStyle{get;set;} 表格行为标题行。当表格跨页时,标题行就会显示在每页的最上面。
4.6.9. XTextTableCellElement类型
表格单元格类型XTextTableCellElement表示表格中的一个单元格,它常用的成员有: public XTextTableCellElement OverrideCell{get;} 若单元格被其他单元格合并了则返回合并本单元格的单元格对象。 public string CellID{get;} 返回单元格的编号,例如“A4”、“B5”。 public bool Visible{get;}
获得或设置单元格是否可见,被合并的单元格是不可见的。 public bool IsOverried{get;} 判断本单元格是否被其他单元格合并了。 public int RowSpan{get;set;} 单元格跨行数,也就是单元格所占据的表格行数,本属性为1则占据一行,单元格纵向没有合并单元格,若该属性值大于1则纵向合并单元格。本属性类似于 HTML 的 TD 元素的 ROWSPAN 属性。 public int ColSpan{get;set;} 跨列数,也就是单元格所占据的表格列数,本属性值为1则单元格占据一列,单元格横
向没有合并单元格,若该属性值大于1则横向合并单元格。本属性类似 HTML 的 TD 元素的 COLSPAN 属性。 public int RowIndex{get;} 从0开始计算的行号。 public int ColIndex{get;}
从0开始计算的列号。
4.6.10. XTextInputFieldElement文本输入域
DCWriter支持文本输入域,文本输入域在DOM中的对象类型是DCSoft.Writer.Dom.XTextInputFieldElement。
用户可以文本输入域中直接编辑其内容,也可以以下列列表的方式编辑其内容。该类型常用的属性有: UserEditable 用户是否可以直接编辑该文本输入域的内容。比如当设置了下拉列表后,若设置该属性为true,则用户既可以使用下拉列表来设置输入域的内容也可以直接编辑该输入域的内容;若设置为该属性为false,则用户只能通过下拉列表的方式来设置输入域的内容而不能直接编辑输入域的内容。 输入域的名称。 输入域的内容是否只读,若设置为只读则用户都不能直接编辑文本域的内容,也不能通过下拉列表的方式修改内容。 背景文本。当输入域内容为空时,输入域就以指定颜色显示该背景文本。背景文本颜色是由输入域所属文档对象的Options.ViewOptions.BackgroundTextColor属性指定的,默认为灰色。 只有在编辑器中才可以显示背景文本,打印时不会打印背景文本。 显示的内容的格式化输出控制样式。 数据源绑定信息。 数据校验样式。 Name Readonly BackgroundText DisplayFormat ValueBinding ValidateStyle 开发者可以使用InsertInputField命令在文档当前插入点新增一个文本输入域,其代码如下: XTextInputFieldElement field = new XTextInputFieldElement(); ------------------ 设置 field 属性的代码 ----------------------- myEditControl.ExecuteCommand(\, false, field); 4.6.10.1. 数据源绑定
文本输入域能绑定到数据源中,它的ValueBinding属性就定义了数据源绑定信息,该属性的数据类型为DCSoft.Writer.Data.XDataBinding类型。该类型的主要属性有 public string DataSource{get;set;}
绑定的数据源的名称。系统将按照这个名称查找文档对象XTextDocument.Parameters列表中的数据。特别的对于名称为“server”参数,实际上是访问了文档对象的ServerObject
属性值。
public string BindingPath{get;set;}
绑定的数据源的路径名称。若原始数据为System.Xml.XmlNode类型,则该路径解释成XPath;若原始数据为System.Data.DataRow、DataRowView类型,则该路径解释为字段名;若原始数据未System.Data.IDataRecord类型,则该路径解释为字段名;若原始数据为System.Collections.IDictionary类型,则该路径解释为字典键值;若为其他类型,则该路径解释成对象的属性名,这里使用System.ComponentModel.PropertyDescriptor类型访问对象属性,因此支持System.ComponentModel.ICustomTypeDescriptor类型的原始数据源。
当原始数据不是XML类型时,该路径是可以多层叠加的,各层路径之间用点号分隔开来。
public bool AutoUpdate{get;set;} 是否在加载文档时自动从数据源中获得数据并更新输入域的内容。 public bool Readonly{get;set;}
指示该数据源绑定是只读的,不能根据输入域的内容更新数据源。
文本输入域有一个签名为“public virtual bool UpdateDataBinding( bool fastMode)”的方法,该方法能访问数据源,获得最新的数据并更新文本输入域中的内容。该方法参数指示是否快速更新内容而不更新文档视图,该方法的返回值就是操作是否修改了输入域的内容。
文本输入域还有一个签名为“public virtual bool WriteDataSource()”的方法。该方法就是读取输入域中的内容并更新到数据源中,该方法的返回值就指示操作是否修改了数据源。
从数据源读取数据并更新输入域的内容是一种系统级的操作,不受用户权限控制、不受文本编辑器只读限制,而且不改变文档或编辑器控件的Modified属性值。
4.6.10.2. 扩展数据源绑定功能
应用程序开发者可以扩展数据源绑定功能。需要经过以下步骤:
第一步:从类型DCSoft.Writer.Data.XDataBindingProvider派生出自定义的数据源绑定行为执行器类型。需要重写的成员有
public object DomReadValue( XTextElement element , XDataBinding binding , bool throwException )
编辑器系统就调用本方法来获得绑定数据源所得到的数据。该方法第一个参数就是操作的文档元素对象;第二个参数就是数据源绑定信息对象;第三个参数指明若操作失败是否抛出异常。本方法的返回值就是要填充到文档元素中的数值,一般为字符串类型。
public bool DomWriteValue( XTextElement element , XDataBinding binding , bool throwException )
编辑器系统将调用本方法将文档中的输入域中的数据写入数据源。本方法第一个参数就是文档元素对象;第二个参数就是数据源绑定信息对象;第三个参数指明若操作失败是否抛出异常。本方法的返回值就是是否成功的修改了数据源中的数据。
第二步:将用户自定义的数据源绑定行为执行器注册到应用系统中。有两种方法,一种是直接设置XTextDocument对象的 BindingProvider属性值;另外就是执行代码“ctl.AppHost.Services.AddService ( typeof( DCSoft.Writer.Data.XDataBindingProvider ) , 用户自定义的提供者对象实例 )”,将用户开发的数据源绑定行为执行器器注册到编辑器系统中。