martes, 24 de noviembre de 2009

Databind de un Dropdownlist con un ObjectDataSource complejo

Hace unos dias me encontre con un escenario sencillo pero interesante. El cliente tenia una clase con varios miembros, entre ellos, propiedades de otros tipos complejos. La necesidad era conectar un ObjectDataSource con el Dropdownlist para mostrar un string de una de las propiedades de esta clase. Aparantemente con WPF esto se realiza sin problemas indicando en el dropdownlist DataTextField="Clase.Valor" pero en ASP.NET esto no es soportado. Esto quiere decir que si una clase Factura tiene una propiedad del tipo DetalleFactura, en el Dropdownlist se mostrara:

Proyecto.DetalleFactura
Proyecto.DetalleFactura
Proyecto.DetalleFactura
.....

Una solución sencilla a esto es realizar un override del metodo ToString() en el tipo complejo que sera enlazado al dropdownlist. En este override se retorna entonces el string deseado.

Ejemplo:

public partial class _Default : System.Web.UI.Page

{

public List ObtenerFacturas()

{

//Crear un tipo complejo

Factura ct = new Factura();

ct.Detalles = new DetalleFactura();

ct.Detalles.TextoFactura = "Factura 1";



//Retornar la coleccion al ObjectDataSource con el tipo complejo

List cFacturas = new List();

cFacturas.Add(ct);

return cFacturas;

}

}



public class Factura

{

DetalleFactura _Detalles;



//Tipo Complejo Hijo

public DetalleFactura Detalles

{

get {return _Detalles; }

set { _Detalles = value; }

}

}



public class DetalleFactura

{

//Propiedad deseada para el dropdownlist

public string TextoFactura;



public override string ToString()

{

return TextoFactura;

}

}

No hay comentarios:

Publicar un comentario