25 novembre 2012

INFOPATH : Supprimer lignes extensibles

Aujourd'hui un petit article relatif à une question récurrente sur les éléments extensibles d'InfoPath. Bien souvent, les utilisateurs ont besoin de supprimer toutes les lignes d'un tableau ou d'une section extensible.
Il n'existe aucun moyen simple de réaliser ceci en travaillant par l'interface. Par contre cela se fait assez facilement en utilisant du code managé.
 
Pour se faire, il est possible d'utiliser la procédure C# ci-dessous.
Comme son nom l'indique, cette procédure permet de supprimer tous les nœuds enfants d'un nœud spécifié en paramètre :
 
        private void RemoveAllChildren(string strNode, XPathNavigator formNavigator)
        {

            try
            {
                XPathNavigator rowsNav = formNavigator.SelectSingleNode(strNode, NamespaceManager);
                XPathNavigator lastChild = rowsNav.SelectSingleNode("child::*[position() = last()]", NamespaceManager);
                XPathNavigator firstChild = rowsNav.SelectSingleNode("child::*[position() =1]", NamespaceManager);

                if ((firstChild != null) && (lastChild != null))
                {
                    firstChild.DeleteRange(lastChild);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Une erreur est survenue lors de la fonction 'RemoveAllChildren' appliquée sur le noeud '" + strNode + "'.", ex);
            }
        }
 
 
Pour appeler cette procédure, il suffit d'utiliser le code de la manière suivante:
      RemoveAllChildren("//my:NomParentExtensible", this.Maindatesource.CreateNavigator());

Aucun commentaire:

Enregistrer un commentaire