2016-06-12 10 views
0

現在、クライアントがInfoPathとImを使用してフォームを作成するのを手伝っています。InfoPathリストの末尾にプログラムで新しい行を追加する

新しい要素をリスト(繰り返しセクション)に追加すると、ビューのリストの上に新しい要素が追加され、その要素を下に追加します。私のクライアントはカスタムボタンを使用して要素の追加を開始し、InfoPathが提供する「要素の追加」テキストを使用しないことを望んでいます。ここで

がより良い私の問題を説明するための例です:ユーザーが入力フィールドに何かに書き込むと

enter image description here

、私はそれが繰り返しセクションにリストに追加することにしたいです。

private XPathNavigator GetField(string xPath) 
{ 
    return MainDataSource.CreateNavigator() 
         .SelectSingleNode(xPath, NamespaceManager); 
} 

public void CTRL10_5_Clicked(object sender, ClickedEventArgs e) 
{ 
    string xPathToList = "/my:myFields/my:group5/my:group6/my:group7"; 
    string xPathToInput = "/my:myFields/my:group5/my:field2"; 
    string xPathToListElement = xPathToList + "/my:field3"; 

    //Creates a new row 
    XPathNavigator list = GetField(xPathToList); 
    XPathNavigator newRow = list.Clone(); 
    newRow.InsertAfter(list); 

    //Sets values on the new row 
    XPathNavigator input = GetField(xPathToInput); 
    XPathNavigator nameField = GetField(xPathToListElement); 
    nameField.SetValue(input.Value); 
    input.SetValue(""); 
} 

私はそれがリストではなく、一番下の最上部に追加されたリストに新しい要素を追加します。.. enter image description here

任意の提案:ここではサンプルコードはありますか?

答えて

0

私がそれを動作させるソリューションは、XPath式のリスト内のlast([last()])要素を取得し、指定された要素の後に要素を追加することでした。

private XPathNavigator GetField(string xPath) 
{ 
    return MainDataSource.CreateNavigator() 
          .SelectSingleNode(xPath, NamespaceManager); 
} 

public void CTRL10_5_Clicked(object sender, ClickedEventArgs e) 
{ 
    string xPathToList = "/my:myFields/my:group5/my:group6/my:group7[last()]"; 
    string xPathToInput = "/my:myFields/my:group5/my:field2"; 
    string xPathToListElement = xPathToList + "/my:field3"; 

    //Creates a new row 
    XPathNavigator list = GetField(xPathToList); 
    XPathNavigator newRow = list.Clone(); 
    newRow.InsertAfter(list); 

    //Sets values on the new row 
    XPathNavigator input = GetField(xPathToInput); 
    XPathNavigator nameField = GetField(xPathToListElement); 
    nameField.SetValue(input.Value); 
    input.SetValue(""); 
} 
0

は作り付けのInfoPath "要素を追加" と同じ仕事をする必要があります

CurrentView.ExecuteAction(ActionType.XCollectionInsert, "XmlToEdit");

を使用してみてください。 "XmlToEdit"を挿入するグループの名前に置き換えてください。

+0

ご返信ありがとうございます。 InfoPath 2010で、私はCurrentViewの下でExecuteActionを取得しませんでした –

関連する問題