Alain López Jiménez

martes, 14 de julio de 2009

ItemDataBound & XmlDataSource

Mi problema en este caso consistió en encontrar la forma de saber el valor de un elemento del XML, para modificar la información a mostrar por el control de datos enlazado al XMLDataSource.

Mas específicamente fue asignarle a un control Imagen un valor por defecto a su propiedad ImageUrl en caso de no existir la ruta en el XML. Este control Imagen se encuentra dentro de un Repeater.

Para eso lo primero es implementar el evento ItemDataBound correspondiente al Repeater, aquí hay que tener en cuenta que e.Item.DataItem retorna un XmlDataSourceNodeDescriptior con el cual no se hace mucho :(

Por lo que hay que seguir la siguiente implementación:

protected void ListRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e != null && e.Item != null && e.Item.DataItem != null)
{
System.Xml.XPath.XPathNavigator nav = ((System.Xml.XPath.IXPathNavigable)e.Item.DataItem).CreateNavigator();
System.Xml.XmlElement element = (System.Xml.XmlElement)nav.UnderlyingObject;

var hasphoto = element.SelectSingleNode("has_photo");

if (hasphoto != null && hasphoto.FirstChild.Value == "No") {
Image i = (Image)e.Item.FindControl("ImageHyperLink").FindControl("Image1");
i.ImageUrl = "~/Images/nothumb_ticket_m.gif";
}
}
}
Fin :)

Etiquetas: ,