一下图片是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中。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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);
}
任务完成。:)