一下图片是InfoPath的data结构,field1里边存了Maintenance accepted^Smith, Bob^12/5/2011^10:40 AM^"test comment"|^Smith,Bob^12/5/2011^10:57 AM^"Add comment only的一串字符串,我需要将他在repeating table中显示成一下格式。

Maintenance accepted

Smith, Bob

12/5/2011

10:40 AM

test comment

 

Smith, Bob

12/5/2011

10:57 AM

TEST test

 

 加一下代码到InfoPath的FormEvents_loading function中。

View Code
public void FormEvents_Loading(object sender, LoadingEventArgs e)         

{

  XPathNavigator nav = MainDataSource.CreateNavigator();
  XPathNavigator field1 = nav.SelectSingleNode("/my:myFields/my:field1",NamespaceManager);
  string txt_field1=field1.Value.ToString();
  //string txt_field1 = "Smith, Bob^12/5/2011^10:40 AM^'test comment'|^Smith,Bob^12/5/2011^10:57 AM^'Add comment only'|^Smith,Bob^12/5/2011^11:57 AM^'comment only'";
  XPathNavigator group1 = nav.SelectSingleNode("/my:myFields/my:group1", NamespaceManager);
  XPathNavigator repeatingGroup = nav.SelectSingleNode("/my:myFields/my:group1/my:group2",NamespaceManager);
  XPathNavigator newRow;
  string[] sArray = txt_field1.Split(new char[2] { '^', '|' });
  int i = 1;
  int counter = 0;
  while(i<sArray.Length-1)
  {
    newRow = repeatingGroup.Clone();
    newRow.SelectSingleNode("/my:myFields/my:group1/my:group2/my:field2",NamespaceManager).SetValue(sArray[i].ToString().Replace(',',' '));
    i++;
    newRow.SelectSingleNode("/my:myFields/my:group1/my:group2/my:field3", NamespaceManager).SetValue(sArray[i].ToString());
    i++;
    newRow.SelectSingleNode("/my:myFields/my:group1/my:group2/my:field4", NamespaceManager).SetValue(sArray[i].ToString());
    i++;
    newRow.SelectSingleNode("/my:myFields/my:group1/my:group2/my:field5", NamespaceManager).SetValue(sArray[i].ToString().Substring(1, (sArray[i].ToString().Trim().Length - 2)));//remove quotations
    i=i+2;
    group1.AppendChild(repeatingGroup);
    counter++;
}
//remove the last row in repeating table
  XPathNodeIterator rows = group1.Select("/my:myFields/my:group1/my:group2", NamespaceManager);
  XPathNavigator first = group1.SelectSingleNode("/my:myFields/my:group1/my:group2[1]", NamespaceManager);
  XPathNavigator second = group1.SelectSingleNode("/my:myFields/my:group1/my:group2[" + Convert.ToString(rows.Count - counter) + "]", NamespaceManager);
  first.DeleteRange(second);
}


任务完成。:)

posted on 2011-12-08 09:50  Liu_Liu  阅读(201)  评论(0编辑  收藏  举报