El objetivo de este artículo es mostrar cómo crear un DataSet tipado a partir de un procedimiento almacenado y usarlo para la creación de un reporte con crystal report y posteriormente llenarlo y filtrarlo desde la lógica de negocio.
Primero agregamos un nuevo ítem.

Luego seleccionamos DataSet y hacemos clic en agregar.

Una vez creado el DataSet arrastramos del toolbox un TableAdapter

Luego de agregar el TableAdapter debemos seleccionar la conexión a la base de datos

Luego seleccionamos procedimientos almacenados existentes.

Y el procedimiento almacenado que deseamos usar para nuestra fuente de datos

Luego el asistente nos muestra los métodos que permiten llenar un datatable o dataset y otro método que retorna los registros seleccionados en un datatable.

Una vez hemos creado el dataset tipado el Visual Studio no lo muestra de la siguiente forma.

Ahora creamos un reporte de crystal report para lo cual agregamos un nuevo ítem.


Podemos crear el reporte con la ayuda del asistente

El cual nos permite seleccionar la fuente de datos que hemos creado anteriormente

Y podemos agregar cualquiera de los campos que nos proporciona la fuente de datos creada anteriormente.


Una vez creado nuestro reporte podemos agregar campos o graficas con el uso de chart

Una vez creado el reporte debemos arrastrar dos controles a nuestra página o control.

En la propiedad ReportSource del ReportViewer le asignamos CrystalReportSource1.
Y finalmente agregamos el código a la página para llenar el DataSet y enviar los parámetros a nuestro procedimiento almacenado.
//Creamos una instancia del DataSet
DataSet1 miDataSet1 = new DataSet1();
DataSet1TableAdapters.
SeleccionarCategoriasTableAdapter SeleccionarCategorias = new WebReporting.DataSet1TableAdapters.SeleccionarCategoriasTableAdapter();
//Y llenamos el DataSet//Los parametros de este metodo depende de los parametros del procedimiento
SeleccionarCategorias.Fill(miDataSet1.SeleccionarCategorias,1,1,100);
//Creamos una instancia del reporte
CrystalReport1 reporte = new CrystalReport1();
//Asignacion de dataset al reporte
reporte.SetDataSource(miDataSet1);
//Al reportViewer le decimos cual reporte nos muestre
this.CrystalReportViewer1.ReportSource = reporte;
Falta agregar que podemos asignarle directamente un dataset que retorne directamente de nuestra lógica de negocio y nos ahorraremos las 3 primeras líneas de código.
Y obtendremos reportes como este en tiempo de ejecución
