2016-06-12 2 views
0

J'aide actuellement un client à créer un formulaire avec InfoPath et Im ayant quelques problèmes pour faire fonctionner mes listes comme je veux.InfoPath ajoutant une nouvelle ligne par programmation à la fin de la liste

Chaque fois que j'ajoute un nouvel élément à une liste (Section extensible), il finit en haut de la liste dans la vue, et je veux qu'il soit ajouté en bas. Mon client souhaite qu'un bouton personnalisé déclenche l'ajout de l'élément et n'utilise pas le texte "add element" fourni par InfoPath.

Voici un exemple pour mieux expliquer mon problème:

enter image description here

Lorsqu'un utilisateur écrit dans un quelque chose dans le champ de saisie, je veux qu'il soit ajouté à la liste dans la section répétition. Voici un exemple de code:

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(""); 
} 

Lorsque j'ajoute un nouvel élément à la liste, il est ajouté en haut de la liste, pas le fond .. enter image description here

Toutes les suggestions?

Répondre

0

La solution avec laquelle je l'ai fait fonctionner obtenait le dernier élément ([last()] de la liste dans l'expression XPath et ajoutait l'élément après l'élément spécifié.

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

essayez d'utiliser

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

qui devrait faire le même travail que le InfoPath intégré "élément ajouter". Il suffit de remplacer le "XmlToEdit" avec le nom de votre groupe que vous souhaitez insérer.

+0

Merci pour votre réponse. Avec InfoPath 2010, je n'ai pas eu ExecuteAction sous CurrentView –