El día de hoy
les traigo la forma de crear un reporte con Sap Crystal Reports desde c#, que
es una muy buena herramienta con los controles mejorados y muy vistosos. Pero
vallamos al grano como siempre.
Desde nuestro
Visual Studio en nuestro proyecto previamente creado, agregamos un nuevo
archivo de tipo de datos, el cual será nuestro DataSet, el cual contendrá la
estructura de nuestra tabla de BD que vamos a utilizar. Una vez abierto el
diseñador agregamos una TablaAdapter con el clic derecho de nuestro mouse o
desde el cuadro de herramientas (Imagen 1), una vez agregada la TablaAdapter,
procedemos a configurar nuestra conexión a BD, o bien seleccionamos la que se esté
utilizando en el proyecto.
Una vez
ingresada nuestra nueva conexión o seleccionada, nos muestra 3 opciones, donde
podemos escoger:
·
Usar
instrucciones SQL: podemos utilizar un select de alguna tabla.
·
Crear nuevos
procedimientos almacenados: podemos crear un procedimiento almacenado
directamente.
·
Usar un
procedimiento almacenado: Nos muestra los procedimientos que existen en
nuestra BD.
Para este ejemplo utilizaremos
usar instrucción SQL, e la cual podemos poner Select * from unidades, donde en
mi BD tengo la tabla unidades con los campos idunidad, Nombre, Activo,
fechaAlta y usuario, y damos en finalizar. Una vez creada la tabla tendrá la
siguiente forma.
Imagen2
Una vez creado nuestro dataset,
vamos a nuestra pagina.aspx a la cual le pondré Reporte1.aspx, y agregamos un
control CrystalReportViewer que esta en el cuadro de herramientas, en el
apartado creación de informes, en caso de que no este, una vez instalado el Sap
Cryrtal report en nuestro cuadro de herramientas y no lo de en automático, con
clic derecho y la opción “elegir
elementos” y buscamos y seleccionamos en componentes de .Net Framework los
elementos CrystalReportViewer, CrystalReportSoruce, una vez hecho esto deben de
aparecer los elementos en nuestro cuado de herramientas (Imagen 3).
Imagen 3
Solo basta con arrastrar el
control a nuestro diseñador, una vez en él nos muestra por default la ventana
de Tareas de Crystal ReportViewer donde nos da la opción de crear nuestro
informe en la opción elegir un origen de informe (Imagen 4), damos clic sobre
<Nuevo origen de informe…>
Imagen 4
Y nos creara el informe en automático,
una vez creado el reporte podemos manipularlo con los datos de nuestro dataset
que se encuentra en el explorador de campos (Imagen 5).
Imagen 5
Para ello solo basta con
arrastrarlos a nuestro reporte en la sección de detalles (Imagen 6), de forma automática
se agrega el nombre del campo en el encabezado de página, estos encabezados se
puede editar a nuestro gusto, o bien podemos agregar líneas o cuadros, según nuestras
necesidades.
Imagen 6
Una vez configurado nuestro
reporte volvemos a nuestra pagina Reporte.aspx y agregamos un control CrystalReportSource,
el cual nos dará la opción de configurar el origen del informe, y seleccionamos
el que creamos previamente (Imagen 7).
Imagen 7
Una vez hecho esto, agregamos un
control ObjectDataSource el cual configuraremos el origen de datos, en el combo
Elegir un objeto comercial, nos pondrá las TablaAdapter que tenemos en nuestro
dataset, damos siguiente y nos mostrara las funciones que podemos realizar
(Imagen 8) en nuestro caso como fue un select nos da de primera instancia en
Elegir un método: el GetData() que se configuro en nuestra TablaAdapter, en las
demás pestañas si no se va a interactuar con ellas podemos dejar ninguno, paso siguiente
damos finalizar, en este paso cuando seleccionamos un vez de un select normal,
y ponemos un procedimiento que reciba parámetros, este mismo nos da la opción de
escoger un control de donde tomar los datos parámetro, ya sea un combo o un
hidden.
Imagen 8
Una vez configurado nuestro
ObjectDataSource, volvemos a nuestro control CrystalReportSoucer, y en vista
Código agregamos después de <Report > una etiqueta <DataSources>
como se muestra a continuación:
<CR:CrystalReportSource
ID="CrystalReportSource1"
runat="server">
<Report FileName="CrystalReport1.rpt">
<DataSources>
<CR:DataSourceRef DataSourceID="ObjectDataSource1"
TableName="Unidades"
/>
</DataSources>
</Report>
</CR:CrystalReportSource>
Con esto vinculamos nuestro
ObjectDataSource con nuestro reporte, paso seguido podemos correr nuestra aplicación.
Les dejo el código de nuestra
pagina Reporte1.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Reporte1.aspx.cs" Inherits="SapCrystalReports.Reporte1" %>
<%@ Register
Assembly="CrystalDecisions.Web,
Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
Namespace="CrystalDecisions.Web"
TagPrefix="CR"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<CR:CrystalReportViewer
ID="CrystalReportViewer1"
runat="server"
AutoDataBind="True"
GroupTreeImagesFolderUrl=""
Height="1202px"
ReportSourceID="CrystalReportSource1"
ToolbarImagesFolderUrl=""
ToolPanelWidth="200px"
Width="1104px"
/>
<CR:CrystalReportSource
ID="CrystalReportSource1"
runat="server">
<Report FileName="CrystalReport1.rpt">
<DataSources>
<CR:DataSourceRef DataSourceID="ObjectDataSource1"
TableName="Unidades"
/>
</DataSources>
</Report>
</CR:CrystalReportSource>
<asp:ObjectDataSource ID="ObjectDataSource1"
runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetData"
TypeName="SapCrystalReports.DataSet1TableAdapters.UnidadesTableAdapter">
<%-- Cuando es un
procedimiento, o alguna funciones que lleve parametros, al configurar el
objectdatasource muestra que necesita los parametros y los tipos de datos.
Ejemplo, el control saldria asi,
haciendo referencia a tres combobox, que al cambiar uno ese actualizara el reporte.
<SelectParameters>
<asp:ControlParameter
ControlID="DropDown1" Name="unidad"
PropertyName="SelectedValue"
Type="Int32" />
<asp:ControlParameter
ControlID="DropDown2" Name="año"
PropertyName="SelectedValue"
Type="Int32"
/>
<asp:ControlParameter
ControlID="DropDown3" Name="activo"
PropertyName="SelectedValue"
Type="Int32"
/>
</SelectParameters>
--%>
</asp:ObjectDataSource>
</div>
</form>
</body>
</html>
Y aquí el link de descarga del
proyecto que esta en Visual Studio 2010.
Espero les halla sido de
utilidad, cualquier duda o comentario no duden en realizarla.
Saludos cordiales!
muy buen articulo lo estoy probando ya que estaba buscando algo parecido.
ResponderEliminarmuchas gracias