ZenosZeng 发表于 2011-12-18 11:16:00

TX Text Control .NET 产品使用指南(10)创建报价单

该示例程序演示如何在办公系统中使用Text Control。办公系统的主要功能就是根据数据库中的数据来创建所需的文档。例如,根据地址信息数据库和商品信息数据库来创建一个订单。
      示例程序分两步完成,第一步只包含从地址信息数据库中取的数据,第二步中才添加其它的功能。
      
本章节相应的源代码可以在TX Text Control.NET的安装目录中找到:
?      Samples\WinForms\VB.NET\ Quote Generator
?      Samples\WinForms\CSharp\ Quote Generator

第一步:创建报价单
      程序启动时,DataGrid中显示了所以的地址信息,示例中使用的数据来自于XML文件。

DataSet dsAddress = new DataSet ("address");
dsAddress.ReadXml("..\\..\\address.xml");
gridAddress.DataSource = dsAddress;
gridAddress.DataMember = "address_record";
选择File/New Quote菜单,会根据当前DataGrid的选中行来创建一个文档,具体方法如下:
打开一个包含Text Control的窗体,同时加载所需的样式表,该样式表将作为最终文档的模板,其中包含所有文档中相同部分的文本,例如:为了答复贵方的询价并根据我们的一半业务处理流程,我们很高兴... ...;并且插入一些需要从数据库中取值的占位字符,例如:地址、日期等等;同时定义字体的大小、公司Logo、文档布局,所以,最终生成的文档都有相同的显示样式。

               
当加载该样式表、占位字符也用数据库中的数据替换之后,我们就得到了一个包含真是地址、名字、客户号和日期的报价单:


第二步:添加产品信息
在你阅读实际代码之前,你可能想运行程序了解它的具体功能,下面将简单介绍一下它的基本功能:
1.      启动程序后看到的是一个主窗体,窗体中显示了一些客户的地址信息,选择其中的一条信息
2.      点击File/New Quote菜单项,将会根据选择的客户信息来创建一个报价单
3.      点击Insert/Article 菜单项,选择一个商品,点击OK按钮,该产品的信息将会自动添加到报价单中
4.      输入需要产品数据,系统会自动总价格
5.      重复步骤三中的操作,添加更多的产品信息添加到报价单中。如果需要删除报价当中某一产品的信息,只需将光标停放在该行,然后点击Edit/Delete菜单项。
6.      最后,点击File/Print菜单项打印该的报价单。

为了添加产品的相关信息,我们需要添加一个名为Article的数据库,Article中的数据与Address中的数据一块显示在主窗体中。

      
      产品信息列表最好以表格形式显示,Text Control提供了表格操作相关的功能,可以输入产品ID、描述和价格,同时还可以对表格中的数据进行计算操作。为此,我们添加一个表格,调整列宽、文字间距和表头信息。最终效果如下:


      在Advanced菜单中添加一个插入表格的菜单项,通过该菜单项在文档中插入表格。同时可以通过Format/Table菜单项来调用Text Control的表格属性设置对话框,可以在对话框中调整表格线,背景色等属性。
      接下来就可以将Article中的数据添加到表中。示例程序中的ArticleTable类演示了如何操纵表格、行、列和单元格等对象。当用户选中Article中的一个产品时,程序将进行以下操作:
1.      检查当前输入位置是否在Article表格的数据行,如果不在数据行,程序将第一个数据行作为将要插入数据的行。
2.      将选中的产品编号、描述和价格插入到第一步中得到的行中。
3.      在表格中触发Changed事件之后,程序会自动计算总金额。

dlz5788 发表于 2012-10-11 17:25:00

RE:TX Text Control .NET 产品使用指南(10)创建报价单

回复 1楼dof的帖子

你好,我在设计器中放置了占位符后,使用 this.TXDoc.Load(fileDoc, TXTextControl.StreamType.InternalFormat);加载该模板后,使用该行代码 TextFieldCollection textFileds = this.TXDoc.TextFields;得到的TextFieldCollection 集合的数量是 0。我想问一下,模板中的占位符 有什么规则,需要怎么设置,谢谢!

iceman 发表于 2012-10-11 18:53:00

回复 2楼dlz5788的帖子

dlz5788 你好,
DocumentTemplate.tx 中的占位符为 TextField。如果你使用模板编辑器编辑模板,是否插入的为:MergeField?
能否把你的 fileDoc 模板发上来查看?

dlz5788 发表于 2012-10-11 19:10:00

这个是我画的模板

回复 3楼iceman的帖子

麻烦你给看一下,我是哪里错了,谢谢!

iceman 发表于 2012-10-12 18:45:00

回复 4楼dlz5788的帖子

你好,不好意思,让你久等了。
test.rar 中模板添加的为 MergeField ,可以通过以下代码获取:

this.textControl1.Load(@"C:\Users\iceman\Desktop\test\test.txd", TXTextControl.StreamType.InternalFormat);
            TXTextControl.ApplicationFieldCollection ac = this.textControl1.ApplicationFields;

            foreach (TXTextControl.ApplicationField item in ac)
            {
                if (item.Format== TXTextControl.ApplicationFieldFormat.MSWord)
                {
                      //添加代码
                }
            }

dlz5788 发表于 2012-10-12 19:41:00

回复 5楼iceman的帖子

非常感谢您的指点,为了这我纠结了好长时间了。好运给你!:hjyzw::mj72::g~ij:
页: [1]
查看完整版本: TX Text Control .NET 产品使用指南(10)创建报价单