Aunque con Infopath 2007 ya se podían realizar listas desplegables en cascada aplicando filtros en el campo correspondiente, teníamos la limitación de que no se podía utilizar para los formularios web (como desde una intranet Sharepoint).
Sin embargo, en la nueva versión de Infopath, esto ya está resuelto, ya que se ha trabajado bastante la integración entre Sharepoint 2010 e Infopath 2010.
Para ver cómo podemos hacer un desplegable en cascada, os dejo unos sencillos pasos, con unas capturas de pantalla:
En nuestro entorno, tenemos un típico caso con una lista Paises, y una Provincias, en la que cada una de las provincias pertenece a un país. Así que al control desplegable "Pais", le asignamos el Origen de datos que devuelve los países de la lista, de forma convencional.
Y al campo Provincias, seguimos el mismo procedimiento.

Sólo debemos tener en cuenta que al elegir los campos, en el asistente para la conexión de datos, tendremos que seleccionar también el campo Pais de la lista de Provincias:
Ahora, aplicamos un filtro. Haciendo click en el icono "Seleccionar XPath" de "Entradas":
En esta ventana, añadimos un filtro de datos:
Y seleccionamos mostrar los datos que cumplan las siguientes condiciones:
El Pais de la provincia, debe ser igual al país seleccionado en el anterior desplegable (del origen de datos principal)

En la segunda parte de la igualdad seleccionamos un campo:

Aceptamos la creación del filtro:
Dándole una vuelta de tuerca más al tema de los desplegables en cascada, es posible que los necesitemos insertar en una Tabla extensible.

En este caso, nostros tenemos unos "tipos de actividad", de los que dependen "subtipos de actividad" como entidades débiles en base de datos.
En este caso, el desplegable no se puede hacer en cascada simplemente con filtros, así que después de enlazar cada control con su fuente de datos, igual que en el apartado anterior, la carga de los datos en el control de la entidad débil (subtipo) hemos decidido hacerla con código.
Para ello, usamos el evento "Changed" del desplegable de la entidad fuerte (en nuestro caso el tipo de actividad):
Dentro del código: public void ExperienciaTipusActivitat_Changed (object sender, XmlEventArgs e) tendremos en cuenta de que si queremos que sea compatible con web, no podemos identificar el control que genera el evento (XmlEventArgs e) por su dirección con la propiedad Match.
public void ExperienciaTipusActivitat_Changed(object sender, XmlEventArgs e) {
XPathNavigator form = MainDataSource.CreateNavigator();
XPathNavigator selectedSubtipusActivitat = e.Site.SelectSingleNode("../my:ExperienciaSuptipusActivitat", NamespaceManager);
if (selectedSubtipusActivitat != null){
string subtipo = selectedSubtipusActivitat.Value;
string tipo = e.Site.Value;
XPathNavigator navProv = DataSources["ObtenirTipusActivitatsSubtipus"].CreateNavigator();
if (navProv.Select("//d:SharePointListItem_RW[d:TipusActivitat='" + tipo + "' and d:ID='" + subtipo + "']", NamespaceManager).Count == 0)
{selectedSubtipusActivitat.SetValue(""); }
}
}