20 de agosto de 2012

Crystal Report con VS2010 (VB y C#)

Hacer reportes en VB o en C# es de los mas cotidiano, incluso es parte de las actividades en una prueba cuando te presentas aplicando a un trabajo(área de login-ACME-reporte con resultados de búsqueda), así que vamos a hacer uno de los mas sencillo pero a partir del cual podrás añadir cosas según te interese.

Para empezar el Crystal Report no viene con el VS2010, así que debes descargarlo, yo te recomiendo que lo bajes desde el link que te ofrece el VS2010 porque es el link directo, sino pues aquí esta, al descargarlo tendrás un archivo Winrar y al comenzar la instalación deberás tener algo como lo que muestro:




Antes de terminar con la instalación es recomendable instalar tiempo de ejecución de 64 bits, tal como se muestra:

Una vez lo hayas descargado e instalado en tu computadora(dar next --> next -->next) vamos a crear un nuevo proyecto, en la imagen se muestra VB como lenguaje pero aquí también postearé para C#.


y lo primero que vamos a hacer sera cambiar el .NET Framework 4 Client Profile que se asigna por defecto a todo proyecto nuevo en VS2010 por el .NET Framework 4 a fin de no tener problemas para utilizar Crystal Report en el proyecto, para eso damos click derecho sobre el proyecto --> propiedades --> Compile --> Advanced Compile Options


y luego cambiamos el .NET Framework 4 Client Profile por el .NET Framework 4


también y dependiendo que estés haciendo en tu proyecto, podrías utilizar el .NET Framework 3.5, pero bueno, si como en este ejemplo te quedas con el .NET Framework 4, debes hacer algo mas, deberas abrir el app.config de tu proyecto, el que esta en el Solution Explorer y cambias el contenido entre las etiquetas <startup></startup>, asi

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

Listo, ahora se debe crear un Dataset, no es la única manera para "jalar" los datos que necesitara tu reporte(podemos hacerlo con procedimientos almacenados), pero es de las mas sencillas, algo que recomiendo antes de crear el Dataset es que crees una conexión a la base de datos que necesitaras desde el Server Explorer para así tener a mano la(s) tabla(s) que te interesen, para esto abres el Server Explorer y escojes una nueva conexión a base de datos.


luego de conectarte a tu base de datos en especifico, pasamos a crear el DataSet, solamente se debe dar click derecho en el proyecto, Add --> New Item

en la parte izquierda de la ventana nos aparecen los common items, buscamos el item Data y seleccionamos el DataSet, en mi caso le pondré de nombre datos.xsd


al hacer esto, tendremos una pantalla gris como en al figura, ahora desde el Server Explorer, arrastramos la(s) tabla(s) sobre la(s) cual(es) basaremos el reporte, para este ejemplo solo sera una tabla y se llama empleado, guardamos y listo, estamos hechos con el dataset, pasemos al reporte.


Ahora vamos a agregar un nuevo item, pero esta vez sera un Crystal Report, por tanto en la parte izquierda de la ventana seleccionamos Reporting y luego entre los items seleccionamos Crystal Report y le especificamos un nombre tal como se muestra, en mi caso le puse el nombre de reporte(es importante recordar estos nombres)


al dar aceptar se va abrir esta ventana con tres opciones, en este ejemplo se utilizara el asistente de informes por lo que damos Aceptar.


el siguiente paso es seleccionar la fuente de datos, como en nuestro caso hicimos un Dataset entonces solo debemos especificarlo desde Datos del proyecto así:


y luego seleccionar todos los campos de la tabla ya que en este ejemplo queremos mostrarlos todos, en este caso solo son tres campos, pero aquí deberías seleccionar los campos en especifico que te importan, ademas luego de seleccionar los campos en esta ventana, para el ejemplo daré click en finalizar, pero tu puedes seguir y definir especificaciones que llevara tu reporte.


Fácil, ahora guardamos y nos vamos al Form1.vb que teníamos desde un principio y lo que haremos es irnos a la ventana de Toolbox y agregar a nuestro formulario vació el componente de CrystalReportViewer


Listo y ahora la parte de programación, en el evento Load del formulario en VB ponemos esto:

Dim sqlConsulta As String = "select * from empleado"
        Dim ds As New datos
        Dim rpt As New reporte
        Try
            Using cnn = New SqlConnection(tu string de conexión a la base de datos)
                Using da = New SqlDataAdapter(sqlConsulta, cnn)
                    da.Fill(ds, "empleado")
                    rpt.SetDataSource(ds)
                    CrystalReportViewer1.ReportSource = rpt
                End Using
            End Using
        Catch ex As Exception
        End Try



ese era el código para una aplicación en lenguaje VB, si lo necesitan en C# aquí esta:

namespace WindowsFormsApplication1

{
    public partial class Form1 : Form
    {
        Datos ds = new Datos();
        reporte rpt = new reporte();
        string conexion = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string sqlConsulta = "select * from empleado";
           
            try {
                using (SqlConnection cnn = new SqlConnection(conexion)) {
                  using (SqlDataAdapter da = new SqlDataAdapter(sqlConsulta, cnn)) {
                        da.Fill(ds, "empleado");
                        rpt.SetDataSource(ds);
                        this.crystalReportViewer1.ReportSource = rpt;
                    }
                }
           
            }catch(Exception ex){
                MessageBox.Show(ex.Message);
            }
        }
    }
}



8 de agosto de 2012

web.config

Web.config es un archivo basado en XML para almacenar valores de configuración para personalizar y controlar cómo funciona un sitio web creado en ASP.NET, esa es una definición corta y sencilla, no hay porque darle mas vueltas así que empecemos a mostrar lo realmente importante.

Para almacenar valores de configuración en las aplicaciones de escritorio (ya sea VB.NET o C#) se utiliza App.Config, algunos desarrolladores lo utilizan porque piensan es la manera correcta de hacer las cosas, otros porque los jefes se lo imponen, si aquí es la primera vez que escuchas de App.Config entonces te recomiendo este link donde te muestra lo que debes saber con respecto a manejar los valores de una cadena de conexión a SQL desde un app.config http://pabletoreto.blogspot.com/search/label/App.Config

Lo que nos compete aquí es utilizar el Web.Config para manejar nuestra cadena de conexión a una base de datos en SQL, asi que deberemos trabajar con ASP.NET, pero aparte de escoger el lenguaje de programacion viene otra parte igual de importante, que necesitas, un web site o un web application? para nuestro ejemplo no nos importa cual usar, es decir, nos vale, pero para esclarecer algunas dudas aqui dejo este poquito de teoria, por tu parte puedes investigar mas...

Uso de WebSite o Web Application puede aparecer, según los casos, indiferente, por lo que es necesario analizar su entorno, su manera de gestionar el código fuente, versiones y la generación de Build y publicaciones, en mi experiencia con ASP.NET, me di cuenta de que el WebSite ya ha causado algunos problemas en la empresa donde trabajo para las referencias, versiones e implementaciones con Source Safe (a veces incluso la falta de conocimiento).

En un Web Application usted tiene mayor control sobre la configuración, sobre todo porque tenemos las propiedades del proyecto y las propiedades de cada archivo en Visual Studio. Debido a estas propiedades es mejor que se puede trabajar con objetos COM+ (por ejemplo, el establecimiento de Copy Local = true en la referencia). También puede generar build en el modo Debug o Release y su código fuente está organizado en namespaces.

Probablemente, si usted utiliza Visual Studio sólo en casa para proyectos personales pueden acabar gustando el WebSite, pero utilizando en proyectos de gran empresa en la generación de Build y publicación son parte clave del proceso, el Web Application termina siendo la mejor opción.

Bueno, entonces creemos una Web Application asi:


y luego segun sea el lenguaje en que vayas a desarrollar pues seleccionas ese, en mi caso selecciono el C#, ahora también fíjate que para nuestro ejemplo se tienen dos opciones: ASP.NET Web Application y ASP.NET Empty Web Application, usa la que desees, solo ten en cuenta que los nombres son los distintivos de cada aplicacion, en el empty solamente te entregan el Web.Config, tu debes agregar todo lo demás según lo necesites, en el otro caso, se te entregan mas ejemplos para trabajar, ero eso no incube en esta entrada asi que por mi parte selecciono el ASP.NET Empty Web Application 

luego en el Solution Explorer se tiene esto:

Luego, damos doble click sobre el Web.config y escribimos esto, claro qeu es para mi caso particular, tu lo cambias a lo que te interese
<configuration>
<connectionStrings>
    <add name="conex" connectionString="Data
Source=.\LINGONET;Initial Catalog=aspData;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
Luego para probarlo agregamos un nuevo Webform y a este le agregamos las directivas siguientes:
using System.Data.SqlClient;
using System.Web.Configuration;
un Gridview que en mi caso he llamado gv y sobre el evento Load de nuestro Webform ponemos este codigo
protected void Page_Load(object sender, EventArgs e)
    {
SqlConnection sql = new SqlConnection(WebConfigurationManager.ConnectionStrings["conex"].ConnectionString);
        try
        {      
sql.Open();          
Response.Write("se logro la conexion");
SqlDataAdapter da = new SqlDataAdapter("select * from empleado", sql);
DataTable dt = new DataTable();
            da.Fill(dt);
            gv.DataSource = dt;
            gv.DataBind();
        }
        catch (SqlException ex)
       {
            Response.Write(ex.Message);
        }
        finally {         
sql.Close();
        }
    }
eso es todo :)