找回密码
 立即注册

QQ登录

只需一步,快速开始

huyu1681
银牌会员   /  发表于:2015-1-12 17:22:00
21#
回复 19楼iceman的帖子

是不是得用坐标,找位置添加??
回复 使用道具 举报
huyu1681
银牌会员   /  发表于:2015-1-12 18:01:00
22#
回复 19楼iceman的帖子

添加 MergeField,用坐标定位添加  MergeField 的代码。。能请教下吗??谢谢了
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-1-13 11:13:00
23#
回复 22楼huyu1681的帖子

测试代码如下:

  1. public tx_linkage()
  2.         {
  3.             InitializeComponent();
  4.         }

  5.         TXTextControl.ApplicationFieldCollection afc;

  6.         private void Form1_Load(object sender, EventArgs e)
  7.         {
  8.             TXTextControl.LoadSettings ls = new TXTextControl.LoadSettings();
  9.             ls.ApplicationFieldFormat = TXTextControl.ApplicationFieldFormat.MSWord;
  10.             ls.ApplicationFieldTypeNames = new string[] { "MERGEFIELD" };
  11.             this.textControl1.Load(AppDomain.CurrentDomain.BaseDirectory + "\\resource\\病历模板的格式-入院录.doc", TXTextControl.StreamType.MSWord, ls);
  12.             afc = this.textControl1.ApplicationFields;

  13.             GetMergeField(this.textControl1.ApplicationFields.GetItem(0));
  14.             BindData();

  15.         }
  16.         string text;
  17.         int start = 0;
  18.         int length= 0;
  19.         private void GetMergeField(ApplicationField applicationField)
  20.         {
  21.             start = applicationField.Start;
  22.             length = applicationField.Length;
  23.             text = applicationField.Text;

  24.         }

  25.         private void AddMergeField()
  26.         {
  27.             MergeField mergeField = new MergeField();
  28.             mergeField.Text = text;
  29.             mergeField.ApplicationField.ShowActivated = true;
  30.             mergeField.ApplicationField.DoubledInputPosition = true;

  31.             textControl1.Focus();
  32.             textControl1.Selection.Start = start-1;
  33.             textControl1.ApplicationFields.Add(mergeField.ApplicationField);
  34.         }

  35.         private void BindData()
  36.         {
  37.             //连接数据库
  38.             string dbconStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=resource\\txdb.mdb";
  39.             OleDbConnection dbcon = new OleDbConnection(dbconStr);
  40.             if (dbcon.State == ConnectionState.Closed)
  41.             {
  42.                 dbcon.Open();
  43.             }

  44.             DataTable dt = new DataTable();
  45.             OleDbDataAdapter dbAdapter = new OleDbDataAdapter("select  * from persons", dbcon);

  46.             dbAdapter.Fill(dt);
  47.             mailMerge1.TextComponent = this.textControl1;
  48.             mailMerge1.SearchPath = "";
  49.             mailMerge1.TemplateFile = AppDomain.CurrentDomain.BaseDirectory + "\\resource\\病历模板的格式-入院录.doc";
  50.             mailMerge1.Merge(dt, true);
  51.             
  52.             AddMergeField();

  53.         }
复制代码


我这里默认需要添加 mergefield 为,需要再做些操作,比如先获取所有字段信息进行对比等。
回复 使用道具 举报
huyu1681
银牌会员   /  发表于:2015-1-13 15:13:00
24#
回复 23楼iceman的帖子

你好,哪句代码是控制第几个mailMerge。。是
  1. GetMergeField(this.textControl1.ApplicationFields.GetItem(0));
复制代码

吗??如果改成
  1. GetMergeField(this.textControl1.ApplicationFields.GetItem(1));
复制代码

就有添加--职业这个了吗?谢谢
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-1-13 15:16:00
25#
回复 24楼huyu1681的帖子

是的,你理解的正确。
回复 使用道具 举报
huyu1681
银牌会员   /  发表于:2015-1-14 09:30:00
26#
回复 25楼iceman的帖子

那怎么获取那个里面的位置。谢谢,能给段循环代码吗?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-1-14 11:30:00
27#
回复 26楼huyu1681的帖子

以下这段代码就是获取 Field 的信息的:

  1. string text;

  2.         int start = 0;

  3.         int length= 0;

  4.         private void GetMergeField(ApplicationField applicationField)

  5.         {
  6.             start = applicationField.Start;
  7.             length = applicationField.Length;
  8.             text = applicationField.Text;
  9.         }
复制代码


循环你的意思是有多个 Field 无法对应吗?那就重复调用这个方法,传递不同的ApplicationField 参数就行了。
回复 使用道具 举报
huyu1681
银牌会员   /  发表于:2015-1-14 13:36:00
28#
回复 25楼iceman的帖子

你好,我添加了2个mailMerge,,用GetMergeField(this.textControl1.ApplicationFields.GetItem(0));
能获取到第一个mailMerge的信息,能添加。。科室获取第2的时候,代码是GetMergeField(this.textControl1.ApplicationFields.GetItem(1));
就直接报错了。。获取不到,请问GetItem(1)。。里面int型的数字,是什么意思。怎么控制。谢谢
回复 使用道具 举报
huyu1681
银牌会员   /  发表于:2015-1-14 13:41:00
29#
回复 27楼iceman的帖子

我是获取不到第2个Field 的信息。GetMergeField(this.textControl1.ApplicationFields.GetItem(0));
这句代码是获取Field信息的吧。。我的是意思添加多个
Field。。但是只能获取到第一个添加的,其他的获取不到。。如果把0改1.就报错了。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-1-14 17:40:00
30#
回复 29楼huyu1681的帖子

亲,能否通过论坛短消息留一个联系电话,我们电话沟通。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部