[C#.NET][Infopath 2007] 如何使用程式加入列至重複表格 / How to Add Row to a Repeat Table(1)
首先建立好資料格式,如下圖
再把它拖拉到Infopath表單,然後新增一個按鈕,如下圖
然後在按鈕事件加入以下程式碼
XPathNavigator xPathNavi = MainDataSource.CreateNavigator();
XPathNavigator details = xPathNavi.SelectSingleNode("/my:myFields/my:fileds", NamespaceManager);
XPathNavigator repTable = details.SelectSingleNode("/my:myFields/my:fileds/my:repeat", NamespaceManager);
for (int i = 0; i < 6; i++)
{
repTable.SelectSingleNode("my:F1", NamespaceManager).SetValue("F1-" + counter.ToString());
repTable.SelectSingleNode("my:F2", NamespaceManager).SetValue("F2-" + counter.ToString());
repTable.SelectSingleNode("my:F3", NamespaceManager).SetValue("F3-" + counter.ToString());
details.AppendChild(repTable);
counter++;
}
然後執行按鈕程式發現多了一筆資料,似乎在第一次插入項目時都會發生這狀況
再多按幾次就發現,資料顯示怪怪的,原來是第一筆資料一直變
為了應付此現象,我們必須動手再處理一下
//程式第一次執行時,刪除特殊的第一列,並記錄真正的第一筆資料
if (FirstRun == false)
{
XPathNodeIterator rows = details.Select("my:repeat", NamespaceManager);
XPathNavigator first = details.SelectSingleNode("my:repeat[1]", NamespaceManager);
XPathNavigator second = details.SelectSingleNode("my:repeat[" + Convert.ToString(rows.Count - counter) + "]", NamespaceManager);
//first.DeleteRange(second);
second.DeleteSelf();
//按鈕已被執行過一次以上,包含一次
FirstRun = true;
//記錄第一筆資料
first = details.SelectSingleNode("my:repeat[1]", NamespaceManager);
f1 = first.SelectSingleNode("my:F1", NamespaceManager).Value;
f2 = first.SelectSingleNode("my:F2", NamespaceManager).Value;
f3 = first.SelectSingleNode("my:F3", NamespaceManager).Value;
}
//當按鈕按下第二次時,寫回剛剛記錄的第一筆資料
if (FirstRun == true)
{
XPathNodeIterator rows1 = details.Select("my:repeat", NamespaceManager);
XPathNavigator first1 = details.SelectSingleNode("my:repeat[1]", NamespaceManager);
first1.SelectSingleNode("my:F1", NamespaceManager).SetValue(f1);
first1.SelectSingleNode("my:F2", NamespaceManager).SetValue(f2);
first1.SelectSingleNode("my:F3", NamespaceManager).SetValue(f3);
}
果然處理掉了剛剛發生的狀況,沒有被多插,第一筆資料也還存在
範例下載:
AddRowToRepeatTable.rar
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET