Mostrando entradas con la etiqueta Visual Studio 2010. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visual Studio 2010. Mostrar todas las entradas

jueves, 28 de marzo de 2013

Crear un informe con Crystal Report en Visual Studio 2010


Lo primero que deberemos realizar es instalar el Crystal Report en nuestra máquina para poderlo utilizar dentro de nuestro Visual Studio 2010. Para ello tendremos que irnos a su página oficial y descargárnoslo.
Una vez tengamos instalado el Crystal Report realizaremos un pequeño programa de ejemplo. En que crearemos un DataSet y le introduciremos datos con los que generaremos el informe.

IMPORTANTE: en el proyecto tenemos  que estar trabajando con el Framework 3.5 ya que con el 4 algunos controles del Crystal Report no aparecen.

El aspecto de la aplicación podría ser una cosa parecida a esto:




Como veis simplemente es un DataGridView que hemos llenados con un DataSet y dos botones. Aquí os dejo el código para llenar el DataSet y llenar el DataGridView.


Los primero será un objeto DataSet a nuestra clase principal.

// Creamos el DataSet
DataSet MisDatos = new DataSet();


Después en el evento “Load” del formulario llenaremos el DataSet y con el mostraremos los datos en un DataGridView.

private void Form1_Load(object sender, EventArgs e)
{

       // Añadimos una tabla al Dataset
       MisDatos.Tables.Add("Empleados");

       // Agremos las columnas a la Tabla
MisDatos.Tables["Empleados"].Columns.Add("DNI");
MisDatos.Tables["Empleados"].Columns.Add("Nombre");
MisDatos.Tables["Empleados"].Columns.Add("Apellidos");
MisDatos.Tables["Empleados"].Columns.Add("Telefono");


// Creamos varias filas y se las agregamos al DataSet
DataRow fila1 = MisDatos.Tables["Empleados"].NewRow();
fila1["DNI"] = "54090909Z";
fila1["Nombre"] = "Pepe";
fila1["Apellidos"] = "Sanchez Vega";
fila1["Telefono"] = "928721102";

DataRow fila2 = MisDatos.Tables["Empleados"].NewRow();
fila2["DNI"] = "33012909Z";
fila2["Nombre"] = "David";
fila2["Apellidos"] = "Perez Santana";
fila2["Telefono"] = "928091502";

DataRow fila3 = MisDatos.Tables["Empleados"].NewRow();
fila3["DNI"] = "10033909Z";
fila3["Nombre"] = "Maria";
fila3["Apellidos"] = "Hernadez Peñate";
fila3["Telefono"] = "928512502";

// Agregamos las filas
MisDatos.Tables["Empleados"].Rows.Add(fila1);
MisDatos.Tables["Empleados"].Rows.Add(fila2);
MisDatos.Tables["Empleados"].Rows.Add(fila3);


// Rellenamos el nuestro Datagrid
dtgEmpleados.DataSource = MisDatos.Tables["Empleados"];

}

Vale ahora vamos a la parte de generar el informe. Para ello deberemos agregar a nuestro proyecto un nuevo elemento para ello tendremos que ir a la ventana de explorador de soluciones y pulsar ratón secundario y seleccionar la acción de “Agregar nuevo elemento”.




Y Agregaremos un conjunto de datos. Este será el DataSet que se le pasara el Crystal para generar el informe y que contiene la estructura de datos que usara.





Ahora tendremos que definir los datos del DataSet que vamos a usar para el informe. Para ello tendremos que agregar un “DataTable” y después ir agregando las columnas que vamos a usar en nuestro informe.



Ahora tendremos que repetir la acción anterior y agregar  un “Nuevo elemento” pero esta vez agregaremos ya el informe.


Este informe lo vamos a generar con el asistente así que siguiente.


Después de ventana anterior se nos mostrara esta otra.


Esta ventana es donde definimos el origen de datos en nuestro caso el DataSet que  hemos creado anteriormente. Para ello tendremos que abrir el árbol que pone “ADO.NET DataSets” y agregar nuestro DataSet.


En esta ventana tendremos que agregar los campos que queremos utilizar para generar el informe en mi caso voy a seleccionar todos los campos.


Nos aparecerán más ventana por si queremos agrupar por algún campo o filtrar para este ejemplo no vamos a utilizar ninguna de estas opciones.


Dejamos el valor por defecto y finalizamos. Ahora se nos abrirá el diseñador de informes del Crystal Report.  Aquí es donde definiremos los encabezados, etiquetas, imágenes etc... Que queramos que se muestren en nuestro informe.


Vale ahora lo que aremos será crear una pequeña función para volcar los datos que se muestran en el DataGridView y que vienen de un objeto DataSet  de .NET a nuestro DataSet tipado que hemos creado anteriormente. Este es el código de la función.

// Traspasa Datos
private DtEmpleados TraspasaDatos()
{
   // Creamos el objeto
   DtEmpleados Empleados = new DtEmpleados();

   // Creamos filas y se la vamos agregando mediante un bucle
   for(int i=0; MisDatos.Tables[0].Rows.Count > i; i++)
   {
      DtEmpleados.DataTable1Row fila = Empleados.DataTable1.NewDataTable1Row();
      fila.DNI = MisDatos.Tables[0].Rows[i]["DNI"].ToString();
      fila.Nombre = MisDatos.Tables[0].Rows[i]["Nombre"].ToString();
      fila.Apellidos = MisDatos.Tables[0].Rows[i]["Apellidos"].ToString();
      fila.Telefono = MisDatos.Tables[0].Rows[i]["Telefono"].ToString();

      // Agregamos la fila a nuestro DataSet tipado
      Empleados.DataTable1.AddDataTable1Row(fila);
   }

    return Empleados;

}

Vale ahora que ya hemos realizado el traspaso de datos ahora nos queda pasarle estos datos al informe y mostrar el informe. Para ello agregaremos un nuevo formulario al proyecto para visualizar el informe. Para ello debemos irnos al explorar de soluciones y agregar un “Nuevo elemento”.



Ahora en el nuevo formulario que acabamos de agregar agregaremos un control nuevo que se llama “ReportViewer” que los podéis encontrar en la categoría “Informe”. Este control el visor de los informes que genera el Crystal Report.


Lo agregáis al formulario y los ajustáis.


Bueno como veis donde vamos a visualizar el informe del Crystal Report es en otro formulario por ello deberemos modificar el constructor de este formulario para poderle pasarle los datos y así poder generar el informe. Adjunto el código de como sobrecargar el constructor y agregarle los datos al informe y como mostrar este informe en el visor del Crystal Report.


public partial class FVisor : Form
{
    DtEmpleados MisDatos;

    public FVisor()
    {
        InitializeComponent();

    }

    // Sobrecargamos el contrustor del forumario
    public FVisor(DtEmpleados Datos)
    {
        InitializeComponent();

        // Pasamos los datos que obtenemos de constructor
        MisDatos = Datos;

    }

    private void FVisor_Load(object sender, EventArgs e)
    {

        // Creamos objeto del informe
        CrystalReport1 Informe =  new CrystalReport1();

        // Pasamos los datos al informe
        Informe.SetDataSource(MisDatos);

        // Le pasamos el informe al visor
        this.crystalReportViewer1.ReportSource = Informe;
    }
}


Bueno ahora volveremos al formulario principal al evento “Clic” para generar el informe.

private void button2_Click(object sender, EventArgs e)
{
    // Creamos una instacia de nuestro DataSet tipado
    // y lo rellenamos con la función de traspaso
    DtEmpleados DatosEmp = new DtEmpleados();

    DatosEmp = TraspasaDatos();

    // Creamos el formulario y le pasamos los datos al formulario
    FVisor MiVisor = new FVisor(DatosEmp);
           
    // Y lo mostramos
    MiVisor.Show();
}


Ya con esto ya se nos habrá imprimido un informe algo sencillo pero bueno ya lo demás es cuestión de añadir elementos y modificar el informe mediante el diseñador.


Ahora otra imagen dejándolo más presentable añadiendo una imagen.


Vídeo de la aplicación funcionando.


Enlace con el proyecto de ejemplo: aqui






miércoles, 1 de febrero de 2012

Creación de Controles en tiempo de ejecución en .NET


Bueno con este pequeño ejemplo que voy realizar, que pretender ser una ayuda tanto para mí como para todo aquel que necesite crear algún control en tiempo de ejecución. Para este ejemplo he utilizado el entorno Visual Studio 2010.

 Lo primero será crear un pequeño formulario como este para realizar el ejemplo. Importante la parte que está por encima de los botones hay un panel donde se van a introducir los controles que en esta imagen no se ve.





Declararemos los vectores de los elementos que queramos crear  en mi caso yo he elegido del tipo botón.
private System.Windows.Forms.Button[] MyButton;

Y creamos las instancia.
MyButton = new System.Windows.Forms.Button[10];

Ahora crearemos las variables que nos servirán para ir recorriendo los índices del vector.
private int num_Butt;

Ya tenemos todo los necesario para empezar a crear elementos para ello iremos al evento Click() de nuestro botón añadir y agregamos el siguiente código.

MyButton[num_Butt] = new System.Windows.Forms.Button();
MyButton[num_Butt].Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
MyButton[num_Butt].Location = new System.Drawing.Point(x, y); MyButton[num_Butt].Name = "Boton" + num_Butt; MyButton[num_Butt].Size = new System.Drawing.Size(24, 452); 
MyButton[num_Butt].Visible = true;
MyButton[num_Butt].Text = "Boton" + (num_Butt +1); 
panel1.Controls.Add(MyButton[num_Butt]);  
num_Butt += 1;

Si te fijas en la tercera sentencia veras que esta parte se encarga de situar el control en el panel para ello usa los argumentos X y Y para mover el control por el panel.

Ahora solo falta determinar los eventos para poder mover el control por el panel para ello deberos modificar cada una de las cuatros opciones que tenemos como ejemplo vamos hacer el que movería el control a la derecha.

x += 10; 
         MyButton[num_Butt-1].Location = new Point(x, y);

Por último nos queda la acción para eliminar los controles. Aunque lo que realmente vamos a hacer es ocultarlos con  el siguiente código.
     
     MyButton[num_Butt - 1].Visible = false;
         num_Butt -= 1;


Aquí o dejo un video de la aplicación funcionando