14/11/07

InfoPath 2007 - Añadir filas a una "Repeating Table" mediante codigo

Es posible que alguna vez necesitemos cargar los datos en una tabla de forma dinámica, en función de una serie de parámetros que introduzcamos previamente. Llegado ese momento este post os puede ayudar.

La estructura de nuestra tabla tendrá, más o menos, la siguiente composición de controles:




el código que necesitaremos es el siguiente. Os lo pongo en C# y en VB:

C#

string myNamespace = NamespaceManager.LookupNamespace("my");
using (XmlWriter writer = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:group1", NamespaceManager).AppendChild())
{
   writer.WriteStartElement("group2", myNamespace);
   writer.WriteElementString("field1", myNamespace, "Cell 1");
   writer.WriteElementString("field2", myNamespace, "Cell 2");
   writer.WriteElementString("field3", myNamespace, "Cell 3");
   writer.WriteEndElement();
   writer.Close();
}


VB

Dim myNamespace As String = NamespaceManager.LookupNamespace("my")
Using writer As XmlWriter = MainDataSource.CreateNavigator().SelectSingleNode( _
"/my:myFields/my:group1", NamespaceManager).AppendChild()
   writer.WriteStartElement("group2", myNamespace)
   writer.WriteElementString("field1", myNamespace, "Cell 1")
   writer.WriteElementString("field2", myNamespace, "Cell 2")
   writer.WriteElementString("field3", myNamespace, "Cell 3")
   writer.WriteEndElement()
   writer.Close()
End Using


4 comentarios:

Sebastian !!!!! dijo...

Juan muy interesante tu link y me gustaria preguntarte si me sirve para el escenario que te voy a describir y sino te pido colaboracion para resolver mi duda.
Escenario: tengo un stored procedure que es invocado desde un web service y me trae como resultado unas tareas desde las BD de project Server, de cada tarea me trae (nombre , fecha inico y fecha final), lo que deseo es mostrar todos estos resultados en una repeating table. Serian por lo menos 20 filas por 3 columnas. Me gustaria mucho que me colaboraras como podria hacerlo porque la tabla solo me permite ver la primera fila de la consulta. Muchisimas gracias. Mi correo es cardonasebast@gmail.com

Juan Alcalá dijo...

Por supuesto que sirve el código. Lo único que tienes que hacer es invocar el codigo que he puesto en el post tantas veces como resultados tengas, con un bucle FOR, WHILE, etc. Ten en cuenta que el ejemplo inserta una fila pero es escalable a cualquier origen de datos que tengas.

saludos y espero que te sirva,
Juan Alcalá

Ricardo Clementi Aroca dijo...

Hola Juan,
Realmente muy bueno tu blog, quería saber si esto me serviría para copiar datos desde una tabla extensible (grupo repetible) que me trae un Web Services a otra tabla extensible, que se encuentre dentro de los campos principales en mi formulario, puesto que necesito que el usuario por cada fila que traiga el web services agregue datos adicionales, estoy trabajando con InfoPath con compatibilidad Web (InfoPath From Services) publicado en SharePoint, ambos 2007 de ante mano muchas gracias.
Mi correo es ricardo.clementi.a@gmail.com

Juan Alcalá dijo...

Sí que te puede servir pero ten mucho cuidado con los permisos. Si te diera problemas de acceso es posible que tuvieras que impersonar. No obstante creo que no tendrás ningún tipo de problema en ese aspecto.