Origen de datos

Anuncio
ORIGENES DE DATOS
Un informe (.rdlc) incluye elementos de conjunto de datos que definen la estructura de los
orígenes de datos que utiliza el informe. Se debe agregar uno o varios conjuntos de datos al
informe antes de poder usar los datos en la definición de informe. Después de crear un
conjunto de datos puede arrastrar un campo específico hasta una región de datos o un cuadro
de texto en el informe.
Para insertar un nuevo origen de datos, pulsaremos en “Nuevo/Conjunto de datos…”.
Tenemos la posibilidad de crear orígenes de datos a partir de tablas, vistas, clases, servicios
Web, entre otros, pero en este curso nos centraremos en vistas y clases.
ORIGEN DE DATOS DESDE UNA VISTA
Si aún no tenemos el origen de datos, crearemos uno nuevo y elegiremos la conexión (creando
una nueva en el caso de que no exista todavía).
Elegimos que incluya los datos confidenciales en la cadena de conexión, el nombre que le
queremos dar y la vista que queremos utilizar.
En la imagen siguiente podemos ver el resultado, con los datos que se va a traer de la vista:
Y en el panel de datos del informe, aparecerán dichos datos para poder arrastrarlos al informe.
ORIGEN DE DATOS DESDE UNA CLASE DE OBJETOS
Para utilizar este tipo de origen de datos debemos elegir la opción “global” y el método a
utilizar.
Si no aparece puede ser causado por:
-La clase que se quiere utilizar es estática. Para utilizar una clase como origen de datos, esta no
deberá ser estática debido a que el informe debe instanciarla para poder obtener sus campos.
-El método no devuelve una colección Innumerable (listas, vectores,…).
-No hemos compilado el proyecto después de crear la clase.
ENLAZAR DATOS A UN INFORME
Con el origen de datos le hemos dicho al informe que campos debe esperar, pero no se los
hemos enviado.
Los informes (.rdlc) están enlazados a objetos DataSet u clases que contienen los datos que
necesita.
Para enlazar los datos disponemos de varias formas, automática o manualmente, las cuales
vamos a ver a continuación.
ENLAZAR DATOS MEDIANTE ASISTENTE
Una vez elegido el informe en el ReportViewer, se nos da la oportunidad de elegir el origen de
datos a enlazar mediante un asistente. Veamos como utilizarlo:
Pulsamos sobre la opción de “Elegir orígenes de datos” y nos aparece el siguiente cuadro, en el
cual, elegiremos “Nuevo origen de datos”.
Aquí es donde elegiremos entre los distintos tipos de datos (Dase de datos para vistas, Objeto
para Clases).
DATOS DESDE VISTAS
Si queremos obtener los datos desde una vista, una vez seleccionada la opción de Base de
datos, seleccionaremos la conexión, y la vista con sus filtros.
DATOS DESDE CLASES
Si queremos obtener los datos desde una clase, después de elegir “Objeto” como tipo de dato,
debemos de elegir que clase nos va a devolver los datos.
Debemos desmarcar la opción de “Mostrar sólo componentes de datos” para que nos
aparezcan nuestras clases.
Elegiremos el método que devuelve los datos, y nos dará la opción de aplicar un filtro para el
método.
Es muy importante que apliquemos el mismo origen de datos, tanto en el informe, como al
enlazar los datos. Es decir, si elegimos utilizar el origen de datos desde una Clase, debemos de
hacerlo en ambos sitios.
ENLAZAR DATOS MANUALMENTE
Enlazar manualmente los datos tiene mucha mas potencia que hacerlo automáticamente. Por
ejemplo, podemos elegir dinámicamente que informe utilizar, o que datos cargar.
Para ello, lo único que necesitamos recordar, es que nombre le hemos dado al origen de datos
del informe (Dataset1 en nuestro caso).
El objeto ReportViewer tiene una colección DataSources con la que jugaremos para cambiar
los datos del informe.
El código para cambiar el origen de datos es el siguiente:
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(miOrigenDeDatos);
ReportViewer1.LocalReport.ReportPath = "NombreReport.rdlc";
ReportViewer1.LocalReport.Refresh();
La primera instrucción nos limpia cualquier origen de datos que pudiese estar enlazado al
informe y la segunda agrega uno nuevo.
La tercera instrucción especifica el informe que deseamos utilizar, refrescándolo mediante la
última instrucción.
DATOS DESDE VISTAS
Simplemente se debe crear un método que acceda a la base de datos y nos devuelva los datos
que deseemos ya filtrados.
(1)ClaseOracleBD baseDatos = new ClaseOracleBD();
(2)baseDatos.CadenaConexion = ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString;
(3)baseDatos.TextoComando = "SELECT * FROM CURSONET.VREPORT_ALUCURSO WHERE NIF = :pNIF";
(4)baseDatos.CrearParametro("NIF", OracleType.VarChar, ParameterDirection.Input, parametro.Length, parametro);
(5)OracleDataAdapter da = baseDatos.DataAdapter;
(6)DataSet ds = new DataSet();
(7)da.Fill(ds);
(8)ReportDataSource dataSourceInforme = new ReportDataSource("DataSet1", ds.Tables[0]);
(9)ReportViewer1.LocalReport.DataSources.Clear();
(10)ReportViewer1.LocalReport.DataSources.Add(dataSourceInforme);
(11)ReportViewer1.LocalReport.ReportPath = "informe/Report3.rdlc";
(12)ReportViewer1.LocalReport.Refresh();
(13)baseDatos.Close();
A continuación se explica el código:
1) Instanciamos el objeto de conexión.
2) Creamos la conexión.
3) Le pasamos al objeto la sentencia a ejecutar.
4) Le pasamos el parámetro de filtro (si existe).
5) Introducimos los resultados en un objeto OracleDataAdapter.
6) Creamos el objeto DataSet.
7) Introducimos los datos en el DataSet desde el OracleDataAdapter.
8) Creamos el enlace a los datos del informe.
9) Borramos todos los posibles enlaces de datos que existieran en el ReportViewer.
10) Asignamos en enlace de datos creado al ReportViewer.
11) Indicamos cual es el informe.
12) Refrescamos el ReportViewer para que pinte el resultado.
13) Cerramos la conexión del objeto de conexión.
DATOS DESDE CLASES
El código, al utilizar clases, se simplifica mucho porque la conexión está en la clase.
(1)ReportViewer1.LocalReport.DataSources.Clear();
(2)ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetCurso", new
ClaseAluCursos().Filtrar("")));
(3)ReportViewer1.LocalReport.ReportPath = "Report.rdlc";
(4)ReportViewer1.LocalReport.Refresh();
1) Limpiamos los enlaces de datos.
2) Agregamos la nueva conexión de datos. Para ello, hacemos una llamada a la clase que
contiene los datos. El nombre del DataSet debe coincidir con el de origen de datos del informe.
3) Asignamos el informe al ReportViewer.
4) Pintamos el ReportViewer.
Al código de ambos casos, se le debe especificar que actúe solamente en la primera llamada.
En caso contrario, como el objeto ReportViewer trabaja internamente en Ajax, entrará en un
bucle, y no lograremos ver datos.
if (!IsPostBack)
{
...
}
Descargar