Pero y si se da el típico caso del profesor que te dice: "pues ustedes sabrán como lo hacen pero yo no voy a instalar nada mas que el Framework para Visual Studio" entonces toca que buscar una solución y esa es crear reportes locales a la aplicación, a lo mejor no sea tan buena comparando esta solución con usar Crystal Report pero el resultado termina siendo el mismo, entregar al usuario un reporte con la información que necesita y listo para imprimir.
Vamos a hacer un reporte casero(local) para una aplicación de escritorio tanto en VB como en C#, la tabla que usaremos se llama empleado y tiene los siguientes campos:
Creamos un nuevo proyecto para escritorio y luego lo primero sera tener el Dataset y lo haremos desde la pestaña Data Sources en nuestro proyecto y seleccionamos agregar un nuevo Data Source al que llamaremos Datos con un DataTable llamado empleado, tal como se muestra:
listo, ya creamos un Dataset para nuestro reporte, ahora falta crear el reporte, para eso damos click derecho sobre nuestro proyecto en el Solution Explorer y agregamos un nuevo item que sera un reporte local y le dejamos como nombre Report1.rdlc(ten presente que el nombre que le des al reporte es muy importante para enlzar los datos) y lo guardamos en la misma carpeta de nuestro proyecto(igualmente la ubicacion de tu reporte es importante).
al hacer lo anterior tendremos una pantalla para diseñar nuestro reporte y en la parte izquierda una pestaña Toolbox desde la cual agregamos una tabla para nuestro ejemplo, tu puedes agregar una Matrix, Rectangle, List según lo necesites:
Name: como nombre para nuestra fuente de datos para el reporte ponemos Datos.
Data source: el Dataset que creamos desde Data Sources y cuyo nombre es Datos
Avaible datasets: el nombre del Datatable del Dataset que creamos: empleado
si tienes alguna duda regresate a ver la segunda imagen de este blog
Ahora en la parte izquierda tendremos una pestaña llamada Report Data y desde ahí jalamos los campos del Dataset hacia la tabla que agregamos en nuestro reporte así:
este es nuestro reporte, de lo mas sencillo, aquí solo muestro como poblar el reporte desde un Dataset, ustedes sabrán cual es el diseño que quieran aplicar
como? si, a continuación muestro el código para el evento click del botón, lo que se hará es que al presionar el botón va buscar un dato es especifico según sea el código que se introduce en el textbox, pero en caso no se introduzca ningún código y se presione el botón Buscar entonces mostrara todos los datos de la tabla empleado y los mostrara en el reporte, dos pajaros de un tiro verdad? te muestro como listar todos lo datos de una tabla o solo uno en particular.
Codigo VB
Imports
Microsoft.Reporting.WinForms
Imports
System.Data
Imports
System.Data.SqlClient
Public
Class Form1
Private Sub BBuscar_Click(sender As
System.Object, e As
System.EventArgs) Handles
BBuscar.Click
Dim info As New Datos 'instancia a Dataset Datos creado con el
asistente
Dim da As New SqlDataAdapter
Dim cmd
As New SqlCommand
Using
Sql As New SqlConnection(My.Settings.cnn)
Sql.Open()
Using
cmd
cmd.Connection = Sql
If (Not (String.IsNullOrEmpty(TextBox1.Text))) Then
cmd.CommandText = "select * from empleado where codigo=@codigo"
cmd.Parameters.AddWithValue("@codigo",
TextBox1.Text)
Else
cmd.CommandText = "select * from empleado"
End
If
da.SelectCommand = cmd
da.Fill(info, "empleado")
End
Using
End Using
ReportViewer1.ProcessingMode = ProcessingMode.Local 'Tipo
de procesamiento del visor
ReportViewer1.Visible = True
ReportViewer1.SetDisplayMode(DisplayMode.Normal)
ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"
Dim rds As New ReportDataSource("Datos", info.Tables(0)) 'Dataset utilizado
para poblar el reporte y la tabla que se utilizara
ReportViewer1.LocalReport.DataSources.Clear() 'limpio
la fuente de datos
ReportViewer1.LocalReport.DataSources.Add(rds) 'Agrego
el ReportDatasource
ReportViewer1.RefreshReport()
End Sub
End
Class
Codigo C#
using System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
System.Data.SqlClient;
using
System.Configuration;
using
Microsoft.Reporting.WinForms;
namespace
WindowsFormsApplication1 {
public partial class Form1 : Form {
SqlConnection
sql = new SqlConnection(ConfigurationManager.ConnectionStrings["cnn"].ConnectionString);
SqlDataAdapter
da;
SqlCommand
cmd;
Datos
info;
public Form1() {
InitializeComponent();
da=new
SqlDataAdapter();
info=new
Datos(); }
private
void Form1_Load(object
sender, EventArgs e){ }
private
void BBuscar_Click(object
sender, EventArgs e){
using
(sql){
sql.Open();
using
(cmd = new SqlCommand()){
cmd.Connection = sql;
if (string.IsNullOrEmpty(textBox1.Text)){
cmd.CommandText = "select * from empleado";
}else{
cmd.CommandText = "select * from empleado where codigo=@codigo";
cmd.Parameters.AddWithValue("@codigo",
textBox1.Text);}
da.SelectCommand = cmd;
da.Fill(info, "empleado");}}
this.reportViewer1.ProcessingMode
= ProcessingMode.Local;
this.reportViewer1.LocalReport.ReportEmbeddedResource
= @"WindowsFormsApplication1.Report1.rdlc";
ReportDataSource
rds = new ReportDataSource("Datos", info.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.RefreshReport();}}}