lunes, 10 de mayo de 2010

Error poco descriptivo en Microsoft Reporting

En estos días me encuentro haciendo algunos reportes con Microsoft Reporting, una herramienta muy buena y poderosa, con la que incluso podemos invocar código .NET al generar reportes, etc. Por motivos de diseño de la aplicación que llama a la generación de reportes tengo que pasarle la gran mayoría de los datos como DataSources, hasta acá todo bien, en cierto momento haciendo esto:

localReport.DataSources.Add(new ReportDataSource("Dato", data));

me encontré con un mensaje de error muy poco descriptivo que me dejó desorientado, el mismo decía así:

"Value does not fall within the expected range."

ok, rápido fui al stacktrace esperando más detalles, pero el mismo no dice nada al respecto, luego fui a www.bing.com y tampoco encontré nada al respecto, de última eché mano del amigo Reflecto Pro y su increíble feature que permite ver el código de cualquier assembly (realmente con este tipo de cosas se paga sólo el  Reflector) me encontré con que en el set del value del DataSource hay esto:

if ((value != null) && !((((value is DataTable) || (value is BindingSource)) || (value is System.Type)) || (value is IEnumerable)))
{
  throw new ArgumentException();
}

O sea que lanza una excepción porque no lo estaba pasando un dato de ninguno de  estos tipo, con lo cual la solución fue hacer esto:

 

localReport.DataSources.Add(new ReportDataSource("Dato", new BindingSource() { DataSource = data }));

O sea, poner mi objeto dentro de un BindingSource, y santo remedio, secillo, pero oscuro. Nos leemos.