0% encontró este documento útil (0 votos)
167 vistas44 páginas

Reportes

Este documento proporciona instrucciones paso a paso para crear un reporte local usando ReportViewer y Local Report en Visual Studio. Explica cómo crear clases para los datos de la factura, configurar las fuentes de datos del reporte, diseñar el encabezado y detalle del reporte usando controles como cuadros de texto y tablas, y vincular los controles a los campos de datos. El objetivo es generar un reporte de factura simple que muestre datos fijos como un ejemplo básico de cómo crear e implementar reportes en Visual Studio.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
167 vistas44 páginas

Reportes

Este documento proporciona instrucciones paso a paso para crear un reporte local usando ReportViewer y Local Report en Visual Studio. Explica cómo crear clases para los datos de la factura, configurar las fuentes de datos del reporte, diseñar el encabezado y detalle del reporte usando controles como cuadros de texto y tablas, y vincular los controles a los campos de datos. El objetivo es generar un reporte de factura simple que muestre datos fijos como un ejemplo básico de cómo crear e implementar reportes en Visual Studio.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 44

REPORTES EN VISUAL STUDIO

ReportViewer y Rdlc, ejemplo Factura (datos


fijos)
Hola a todos:
El siguiente articulo pretende mostrar la manera de crear un reporte local usando ReportViewer
y Local Report o Rdlc enlazando su origen datos (DataSource) a una fuente proveniente de una
Lista Genrica de propiedades. Como se que esto puede resultar un tema demasiado
complicado cuando no se tiene experiencia en el manejo de reportes tratare de que el articulo
sea lo mas descriptivo posible y para ello me apoyare en la mayor cantidad de imgenes
posibles, traten de realizar el ejemplo siguiendo el tutorial, si un paso no les queda claro
sintanse con toda confianza de hacer las consultas necesarias, al final del articulo tendrn el
link de descarga del proyecto de ejemplo.
Los datos los enviaremos desde un formulario simulando ser los datos de una Factura
comercial, que contiene Datos del cliente y los artculos adquiridos.
Bien, comencemos creando un Formulario y arrastrando los controles necesarios hasta obtener
un formulario como este:

Agregue un segundo formulario, llmelo FacturaRpt.cs este contendr el control ReportViewer


al cual enlazaremos el LocalReport, asi que agregue uno arrastrndolo desde el cuadro de
herramientas.

Agregue un LocalReport, deje el nombre default:

Ahora, crearemos las clases contenedoras de las entidades, recuerde que una entidad esta
compuesta por campos y propiedades.
Inserte una nueva clase y nmbrela EArticulo, la cual contendr todas las propiedades de la
entidad Articulo, la clase deber de quedar con esta estructura:

Cdigo C#:
namespace ReportViewerInvoiceReport_CSharp
{
public class EArticulo
{
public int Numero { get; set; }
public string Upc { get; set; }
public string Descripcion { get; set; }
public decimal Piezas { get; set; }
public decimal Precio { get; set; }
public decimal Importe { get; set; }
}
}
Cdigo Vb.Net:
Public Class EArticulo
Public Property Numero() As Integer
Public Property Upc() As String
Public Property Descripcion() As String
Public Property Piezas() As Decimal
Public Property Precio() As Decimal
Public Property Importe() As Decimal
End Class
Despus inserte una nueva clase y nmbrela EFactura, esta clase contendr todas las
propiedades del encabezado de la factura, la clase deber de quedar con esta estructura:
Cdigo C#:
using System;
using System.Collections.Generic;
namespace ReportViewerInvoiceReport_CSharp
{
public class EFactura
{
public int Numero { get; set; }
public string Nombre { get; set; }
public string Rfc { get; set; }
public string Direccion { get; set; }
public decimal Subtotal { get; set; }
public decimal Iva { get; set; }
public decimal Total { get; set; }
public DateTime FechaFacturacion { get; set; }
//Creamos una lista con una nueva Instancia de la clase
Articulo
//esta lista contendra el detalle de la factura
public List<EArticulo> Detail = new List<EArticulo>();

}
}
Cdigo Vb.Net:
Imports System.Collections.Generic
Public Class EFactura
Public Property Numero() As Integer
Public Property Nombre() As String
Public Property Rfc() As String
Public Property Direccion() As String
Public Property Subtotal() As Decimal
Public Property Iva() As Decimal
Public Property Total() As Decimal
Public Property FechaFacturacion() As DateTime
'Creamos una lista con una nueva Instancia de la clase Articulo
'esta lista contendra el detalle de la factura
Public Detail As New List(Of EArticulo)()
End Class
Configurar el Reporte del informe Report1.rdlc
Para poder usar las clases de EFactura para llenar el Encabezado del reporte
y EArticulo para el detalle del mismo, primero debemos de generar el proyecto, para ello
localice el men Generar > Generar Solucin
Establecer la fuente de datos del Reporte
Active el cuadro Datos del informe, Men Ver >Datos del informe

Establezca el Nombre del conjunto de datos y haga click sobre el botn Nuevo:

Seleccione Objeto y haga Click sobre el botn Siguiente:

Seleccione la clase EFactura, recuerde que esta clase contiene las propiedades para el
encabezado de la factura y haga Click sobre el botn Finalizar (Si no hubiera generado el
proyecto estas clases no estaran visibles, as que si no las ve por favor cierre la ventana y
genere la solucin):

Observe que ya tiene una fuente de datos seleccionada, solo haga Click en el botn Aceptar:

Bien, ya tiene una Fuente de datos configurada:

Siga los mismos pasos para agregar la fuente de datos para el detalle del reporte solo que
ahora seleccionara la clase EArticulo, al final tendr un resultado como el siguiente:

Configurar tamao y encabezado del informe


Active la regla del informe para ello men Informe > Regla
Configure el tamao del informe, men Informe > Propiedades del informe

Un punto muy importante en este paso es tener presente el Ancho o alto del reporte
dependiendo que tipo de orientacin se haya elegido, en este caso el ancho es lo que interesa,
considere que tiene un ancho mximo de 21.59 cm. a este espacio le restara el valor total de
los mrgenes que son 2.0 cm en total ya que configuro un margen de 0.5 cm, dando un espacio
de trabajo real disponible de 19.59 cm., si en el diseo de nuestro reporte nos pasamos de este
espacio disponible nuestro reporte en lugar de mostrarnos una hoja nos mostrar ara dos,
normalmente la segunda hoja sin o con pocos datos.
Bien, continuemos
Agregue un encabezado de reporte, men Informe > Agregar encabezado de pagina
Active el cuadro de herramientas, men Ver > Cuadro de herramientas:

Arrastre tantos Cuadros de texto como se requieran, recuerde que nuestros datos provienen de
una clase, entonces por cada campo-propiedad de la clase tiene que crear un control Cuadro
de texto para poder visualizar el datoesto de crear un control por cada propiedades de la

clase origen es nicamente para este reporte, en realidad usted puede elegir que datos mostrar
y cuales no.
Configurar control cuadro de texto:
Click derecho sobre el control cuadro de texto que deseemos configurar:
Recuerde que establecer un nombre a los controles que vayamos utilizando es de vital
importancia porque ser en base a este como los identificaremos, en proyectos pequeos tal
vez no tenga problemas si deja los nombres asignados por default pero, en proyectos grandes
esta mala practica nos provocara constantes dolores de cabeza, entonces, nunca olvide
ponerle un nombre a los controles. Considere que el nombre debe de identificar fcilmente al
control al que hace referencia y al dato que contendr o al cual estar relacionado, en este
caso txtFactura es muy descriptivo, ya que se entiende que es un control textBox o cuadro de
texto y que contendr el numero de factura.
Para definir el origen del dato que mostrara el control cuadro de texto despliegue el ComboBox
Valor, vera que este estar cargado con las propiedades de las clases las cuales definimos
como fuente de datos, no le ser difcil identificar a que clase pertenece cada una ya que al
final podra ver el nombre que le puso al origen de datos.

Desactivar la casilla Permitir aumentar el alto puede resultar muy importante para conservar
un buen diseo, tener activada esta casilla permite que el control cambie de tamao en tiempo
de ejecucin adecundose al tamao del valor que contiene, modificando con esto el diseo
hasta el punto de generar hojas innecesarias.

En este ejemplo el campo Factura ser del tipo numrico por lo cual para conservar un formato
de numero correcto, tendr que configurar el lenguaje que utilizara el campo, para mi ubicacin
(Mxico) la configuracin de lenguaje ser es-Mex, para configurar esta propiedad:
Seleccione el control cuadro de texto > Presione F4:

Si no hiciera esto, un formato numrico podra no mostrarse correctamente por ejemplo la


cantidad Mil doscientos cincuenta y seis con cincuenta y seis decimales en Mxico ser
1,256.56 pero en Espaa se escribira de esta manera 1.256,56. Esta configuracin debemos
de hacerla aun si en la clase Main de nuestro proyecto hayamos definido un lenguaje de
manera predeterminada.
Agregar parmetros al Reporte:

Para abarcar mas sobre el tema de ReportViewer y local report, subamos un poco mas el nivel
de nuestro proyecto agregando parmetros al mismo, esto no siempre es necesario as que en
este articulo solo lo haremos para fines ilustrativos, es decir, para cuando lleguemos a
necesitarlo tendremos el conocimiento disponible de como usarlos.
En el Datos del informe > Click derecho sobre Parametros > Agregar parametro:

De nuevo, recuerde que nombrar correctamente a cada control que agregamos es de vital
importancia:

Agregue un nuevo parmetro y nmbrelo parametroEmpresa.

Ahora, arrastre dos controles Cuadro de texto al informe, y vaya a las propiedades para
configurar el valor a mostrar:

Haga lo mismo para el segundo control agregado, veamos como va nuestro diseo del informe:

Para el detalle del informe, agregue un Tabla arrastrndola desde el cuadro de herramientas,
vaya a las propiedades de la tabla recin agregada, ubique la propiedad DataSetName par
establecer el origen de datos y seleccione Detalle, recuerde que ese fue el nombre que
establecimos al origen de datos:

Agregue las columnas que falten para completar el cuerpo del informe, para ello haga Click
derecho sobre la tabla, Insertar columna, Izquierda o derecha.
Despus establezca el valor que mostrara cada columna, para ello tiene dos opciones,
seleccionar el valor desde el icono que vera en la esquina superior derecha de cada celda o ir a
propiedades del cuadro de texto tal cual como lo hizo anteriormente:

Establezca el tamao de fuente, borde, tipo de dato, lenguaje a utilizar (recuerde lo comentado
anteriormente sobre el formato de numero/moneda)
Como va nuestro diseo de informe?

Si tienen un resultado como este, pueden dar su tarea por terminada en cuanto al diseo del
informe si aun no lo logran, todo es cuestin que revisen como configurar un control TextBox o
cuadro de texto como gusten llamarlo y ponerse a ver Alineacin, tipo de fuente, borde, relleno,
etc
Hasta aqu daremos por terminado nuestro diseo, ahora vayamos a:
Establecer una Lista Genrica como DataSource de un local report:
Ubique el Formulario contenedor del ReportViewer llamado FacturaRpt, seleccione el icono
superior derecho del reportViewer > Seleccione el local report que utilizaremos (el nico que
hemos diseado)

Una vez echo lo anterior, genere el evento Load del Formulario, para ello puede hacer doble
click sobre la barra de titulo o seleccionar el form y presionar la tecla de funcin F4, esto abrir
la caja de propiedades, en la parte superior podr ver un icono con forma de rayo de color
amarillo, haga click sobre el para ver los eventos que implementa el control, despus ubique el
Evento que le interese implementar en este caso nos interesa el evento Load.
Copie y pegue el siguiente cdigo:
Cdigo C#:
using
using
using
using

System;
System.Collections.Generic;
System.Windows.Forms;
Microsoft.Reporting.WinForms;

namespace ReportViewerInvoiceReport_CSharp
{
public partial class FacturaRpt : Form
{
//
//Cree dos listas una para el Encabezado y otra para el
detalle
//
public List<EFactura> Invoice = new List<EFactura>();
public List<EArticulo> Detail = new List<EArticulo>();
//
//Cree las propiedades publicas Titulo y Empresa
//
public string Titulo { get; set; }
public string Empresa { get; set; }
public FacturaRpt()
{
InitializeComponent();
}
private void FacturaRpt_Load(object sender, EventArgs e)
{

//Limpiemos el DataSource del informe


reportViewer1.LocalReport.DataSources.Clear();
//
//Establezcamos los parmetros que enviaremos al reporte
//recuerde que son dos para el titulo del reporte y para
el nombre de la empresa
//
ReportParameter[] parameters = new ReportParameter[2];
parameters[0] = new ReportParameter("parameterTitulo",
Titulo);
parameters[1] = new ReportParameter("parameterEmpresa",
Empresa);
//
//Establezcamos la lista como Datasource del informe
//
reportViewer1.LocalReport.DataSources.Add(new
ReportDataSource("Encabezado", Invoice));
reportViewer1.LocalReport.DataSources.Add(new
ReportDataSource("Detalle", Detail));
//
//Enviemos la lista de parametros
//
reportViewer1.LocalReport.SetParameters(parameters);
//
//Hagamos un refresh al reportViewer
//
reportViewer1.RefreshReport();
}
}
}
Cdigo Vb.Net:
Imports Microsoft.Reporting.WinForms
Public Class FacturaRpt
'
'Cree dos listas una para el Encabezado y otra para el detalle
'
Public Invoice As New List(Of EFactura)()
Public Detail As New List(Of EArticulo)()
'
'Cree las propiedades publicas Titulo y Empresa
'
Public Property Titulo() As String
Public Property Empresa() As String
Private Sub FacturaRpt_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load

'Limpiemos el DataSource del informe


ReportViewer1.LocalReport.DataSources.Clear()
'
'Establezcamos los parametros que enviaremos al reporte
'recuerde que son dos para el titulo del reporte y para el
nombre de la empresa
'
Dim parameters As ReportParameter() = New ReportParameter(1)
{}
parameters(0) = New ReportParameter("parameterTitulo", Titulo)
parameters(1) = New ReportParameter("parameterEmpresa",
Empresa)
'
'Establezcamos la lista como Datasource del informe
'
ReportViewer1.LocalReport.DataSources.Add(New
ReportDataSource("Encabezado", Invoice))
ReportViewer1.LocalReport.DataSources.Add(New
ReportDataSource("Detalle", Detail))
'
'Enviemos la lista de parametros
'
ReportViewer1.LocalReport.SetParameters(parameters)
'
'Hagamos un refresh al reportViewer
'
ReportViewer1.RefreshReport()
End Sub
End Class

Hagamos lo ultimo que falta, enviar los datos desde el formulario principal:
Genere el Evento load del Formulario principal,

Despus de generado el evento trate de seguir estas lneas de cdigo, escriba linea por linea si
copia y pega ser mas complicado que comprenda (suponiendo que su experiencia en
desarrollo no es amplia):

Cdigo C#:
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Windows.Forms;

namespace ReportViewerInvoiceReport_CSharp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Funcion encargada de llenar el control DataGridView
/// <autor>Jos Luis Garca Bautista</autor>
/// </summary>
/// <returns>Una lista generica de la clase artculo</returns>
private static List<EArticulo> FillDgv()
{
//
//Cree una lista generica de la entidad EArticulo
//
List<EArticulo> listaArticulos = new List<EArticulo>();

//
//Instancie la clase EArticulo para agregar datos a la
lista
//
EArticulo item = new EArticulo
{
//Establezca valores a cada una de
las propiedades
Numero = 1,
Upc = "7501020405680",
Descripcion = "Descripcin del
artculo 1",
Piezas = 6,
Precio = new decimal(12.50),
Importe = (decimal)(6 * 12.5),
};
//
//Agregamos el Item a la lista
//
listaArticulos.Add(item);
EArticulo item1 = new EArticulo
{
Numero = 2,
Upc = "7501040805610",
Descripcion = "Descripcin del
artculo 2",
Piezas = 3,
Precio = new decimal(22.50),
Importe = (decimal)(3 * 22.5),
};
listaArticulos.Add(item1);
EArticulo item2 = new EArticulo
{
Numero = 3,
Upc = "0412200805610",
Descripcion = "Descripcin del artculo 3",
Piezas = 20,
Precio = new decimal(52.80),
Importe = (decimal)(20 * 52.80),
};
listaArticulos.Add(item2);
return listaArticulos;
}
private void Form1_Load(object sender, EventArgs e)
{
//

//La funcion GenerateNumber() se utiliza unicamente para


generar un Nmero
//aleatorio que simulara ser el numerod e factura
txtnumero.Text = GenerateNumber().ToString();
//Establecemos la propiedad AutoGenerateColumns en False
para evitar que se agreguen
//nuevas columnas a la derecha de las que creamos en
tiempo de diseo.
//
dgvdetalle.AutoGenerateColumns = false;
//
//Establecemos el DataSource del control DataGridView
//
dgvdetalle.DataSource = FillDgv();
//
//Mapeamos las propiedades de la clase devuelta por la
Funcion FillDgv()
//recuerde que esta funcion devuelve una lista del tipo
EArticulo
//
dgvdetalle.Columns["columnNumero"].DataPropertyName =
"Numero";
dgvdetalle.Columns["columnUpc"].DataPropertyName = "Upc";
dgvdetalle.Columns["columnDescripcion"].DataPropertyName =
"Descripcion";
dgvdetalle.Columns["columnPiezas"].DataPropertyName =
"Piezas";
dgvdetalle.Columns["columnPrecio"].DataPropertyName =
"Precio";
dgvdetalle.Columns["columnImporte"].DataPropertyName =
"Importe";
//
//Hacemos las sumatorias usando un mtodo de extensin de
Linq
//
decimal sum = FillDgv().Sum(x => x.Importe);
decimal iva = (Math.Round(((sum / 116) * 16), 2));
decimal subtotal = Math.Round(sum - iva, 2);
txttotal.Text = Convert.ToString(Math.Round(sum, 2));
txtiva.Text = Convert.ToString(iva);
txtsubtotal.Text = Convert.ToString(subtotal);
}
private static int GenerateNumber()
{
Random rdm = new Random();
return rdm.Next();

private void InvoiceGenerate()


{
//
//Hacemos una instancia de la clase EFactura para
//llenarla con los valores contenidos en los controles del
Formulario
EFactura invoice = new EFactura();
invoice.Numero = Convert.ToInt32(txtnumero.Text);
invoice.Nombre = txtnombre.Text;
invoice.Rfc = txtrfc.Text;
invoice.Direccion = txtdireccion.Text;
invoice.FechaFacturacion = dtpfecha.Value.Date;
invoice.Subtotal = Convert.ToDecimal(txtsubtotal.Text);
invoice.Iva = Convert.ToDecimal(txtiva.Text);
invoice.Total = Convert.ToDecimal(txttotal.Text);
//Recorremos los Rows existentes actualmente en el control
DataGridView
//para asignar los datos a las propiedades
foreach (DataGridViewRow row in dgvdetalle.Rows)
{
EArticulo article = new EArticulo();
//
//Vamos tomando los valores de las celdas del row que
estamos
//recorriendo actualmente y asignamos su valor a la
propiedad de la clase intanciada
//
article.Numero =
Convert.ToInt32(row.Cells["columnNumero"].Value);
article.Upc =
Convert.ToString(row.Cells["columnUpc"].Value);
article.Descripcion =
Convert.ToString(row.Cells["columnDescripcion"].Value);
article.Piezas =
Convert.ToDecimal(row.Cells["columnPiezas"].Value);
article.Precio =
Convert.ToDecimal(row.Cells["columnPrecio"].Value);
article.Importe =
Convert.ToDecimal(row.Cells["columnImporte"].Value);
//
//Vamos agregando el Item a la lista del detalle
//
invoice.Detail.Add(article);
}
//

//Creamos una instancia del Formulario que contiene


nuestro
//ReportViewer
//
FacturaRpt frm = new FacturaRpt();
//
//Usamos las propiedades publicas del formulario, aqui es
donde enviamos el valor
//que se mostrara en los parametros creados en el
LocalReport, para este ejemplo
//estamos Seteando los valores directamente pero usted
puede usar algun control
//
frm.Titulo = "Este es un ejemplo de Factura";
frm.Empresa = "Este es un ejemplo del Nombre de la
Empresa";
//
//Recuerde que invoice es una Lista Generica declarada en
el FacturaRtp, es una lista
//porque el origen de datos del LocalReport unicamente
permite ser enlazado a objetos que
//implementen IEnumerable.
//
//Usamos el metod Add porque Invoice es una lista e
invoice es una entidad simple
frm.Invoice.Add(invoice);
//
//Enviamos el detalle de la Factura, como Detail es una
lista e invoide.Details tambien
//es un lista del tipo EArticulo bastara con igualarla
//
frm.Detail = invoice.Detail;
frm.Show();
}
private void btnImprimir_Click(object sender, EventArgs e)
{
InvoiceGenerate();
}
}
}
Cdigo Vb.Net:
Public Class Form1
''' <summary>
''' Funcion encargada de llenar el control DataGridView
''' <autor>Jos Luis Garca Bautista</autor>
''' </summary>
''' <returns>Una lista generica de la clase artculo</returns>
Private Shared Function FillDgv() As List(Of EArticulo)

'
'Cree una lista generica de la entidad EArticulo
'
Dim listaArticulos As New List(Of EArticulo)()
'
'Instancie la clase EArticulo para agregar datos a la lista
'
'Establezca valores a cada una de las propiedades
Dim item As New EArticulo()
item.Numero = 1
item.Upc = "7501020405680"
item.Descripcion = "Descripcin del artculo 1"
item.Piezas = 6
item.Precio = New Decimal(12.5)
item.Importe = CDec(6 * 12.5)
'
'Agregamos el Item a la lista
'
listaArticulos.Add(item)
Dim item1 As New EArticulo()
item1.Numero = 2
item1.Upc = "7501040805610"
item1.Descripcion = "Descripcin del artculo 2"
item1.Piezas = 3
item1.Precio = New Decimal(22.5)
item1.Importe = CDec(3 * 22.5)
listaArticulos.Add(item1)
Dim item2 As New EArticulo()
item2.Numero = 3
item2.Upc = "0412200805610"
item2.Descripcion = "Descripcin del artculo 3"
item2.Piezas = 20
item2.Precio = New Decimal(52.8)
item2.Importe = CDec(20 * 52.8)
listaArticulos.Add(item2)
Return listaArticulos
End Function

Private Sub Form1_Load(sender As System.Object, e As


System.EventArgs) Handles MyBase.Load
'
'La funcion GenerateNumber() se utiliza unicamente para
generar un Nmero
'aleatorio que simulara ser el numerod e factura
txtnumero.Text = GenerateNumber().ToString()

'Establecemos la propiedad AutoGenerateColumns en False para


evitar que se agreguen
'nuevas columnas a la derecha de las que creamos en tiempo de
diseo.
'
dgvdetalle.AutoGenerateColumns = False
'
'Establecemos el DataSource del control DataGridView
'
dgvdetalle.DataSource = FillDgv()
'
'Mapeamos las propiedades de la clase devuelta por la Funcion
FillDgv()
'recuerde que esta funcion devuelve una lista del tipo
EArticulo
'
dgvdetalle.Columns("columnNumero").DataPropertyName = "Numero"
dgvdetalle.Columns("columnUpc").DataPropertyName = "Upc"
dgvdetalle.Columns("columnDescripcion").DataPropertyName =
"Descripcion"
dgvdetalle.Columns("columnPiezas").DataPropertyName = "Piezas"
dgvdetalle.Columns("columnPrecio").DataPropertyName = "Precio"
dgvdetalle.Columns("columnImporte").DataPropertyName =
"Importe"
'
'Hacemos las sumatorias usando un mtodo de extensin de Linq
'
Dim sum As Decimal = FillDgv().Sum(Function(x) x.Importe)
Dim iva As Decimal = (Math.Round(((sum / 116) * 16), 2))
Dim subtotal As Decimal = Math.Round(sum - iva, 2)
txttotal.Text = Convert.ToString(Math.Round(sum, 2))
txtiva.Text = Convert.ToString(iva)
txtsubtotal.Text = Convert.ToString(subtotal)
End Sub
Private Shared Function GenerateNumber() As Integer
Dim rdm As New Random()
Return rdm.[Next]()
End Function
Private Sub InvoiceGenerate()
'
'Hacemos una instancia de la clase EFactura para
'llenarla con los valores contenidos en los controles del
Formulario
Dim invoice As New EFactura()
invoice.Numero = Convert.ToInt32(txtnumero.Text)
invoice.Nombre = txtnombre.Text
invoice.Rfc = txtrfc.Text

invoice.Direccion = txtdireccion.Text
invoice.FechaFacturacion = dtpfecha.Value.[Date]
invoice.Subtotal = Convert.ToDecimal(txtsubtotal.Text)
invoice.Iva = Convert.ToDecimal(txtiva.Text)
invoice.Total = Convert.ToDecimal(txttotal.Text)
'Recorremos los Rows existentes actualmente en el control
DataGridView
'para asignar los datos a las propiedades
For Each row As DataGridViewRow In dgvdetalle.Rows
Dim article As New EArticulo()
'
'Vamos tomando los valores de las celdas del row que
estamos
'recorriendo actualmente y asignamos su valor a la
propiedad de la clase intanciada
'
article.Numero =
Convert.ToInt32(row.Cells("columnNumero").Value)
article.Upc =
Convert.ToString(row.Cells("columnUpc").Value)
article.Descripcion =
Convert.ToString(row.Cells("columnDescripcion").Value)
article.Piezas =
Convert.ToDecimal(row.Cells("columnPiezas").Value)
article.Precio =
Convert.ToDecimal(row.Cells("columnPrecio").Value)
article.Importe =
Convert.ToDecimal(row.Cells("columnImporte").Value)
'
'Vamos agregando el Item a la lista del detalle
'
invoice.Detail.Add(article)
Next
'
'Creamos una instancia del Formulario que contiene nuestro
'ReportViewer
'
Dim frm As New FacturaRpt()
'
'Usamos las propiedades publicas del formulario, aqui es donde
enviamos el valor
'que se mostrara en los parametros creados en el LocalReport,
para este ejemplo
'estamos Seteando los valores directamente pero usted puede
usar algun control
'
frm.Titulo = "Este es un ejemplo de Factura"
frm.Empresa = "Este es un ejemplo del Nombre de la Empresa"

'
'Recuerde que invoice es una Lista Generica declarada en
FacturaRtp, es una lista
'porque el origen de datos del LocalReport unicamente permite
ser enlazado a objetos que
'implementen IEnumerable.
'
'Usamos el metod Add porque Invoice es una lista e invoice es
una entidad simple
frm.Invoice.Add(invoice)
'
'Enviamos el detalle de la Factura, como Detail es una lista e
invoide.Details tambien
'es un lista del tipo EArticulo bastara con igualarla
'
frm.Detail = invoice.Detail
frm.Show()
End Sub
Private Sub btnImprimir_Click(sender As System.Object, e As
System.EventArgs) Handles btnImprimir.Click
InvoiceGenerate()
End Sub
End Class
Ahora solo queda probar nuestra aplicacin:
Llenamos los datos:

Presione el botn Imprimir, si sigui al pie de la letra el Articulo tendr un reporte como este:

Observe, en el reporte el Formato numrico y Mdena, al igual que no tenemos hojas de mas
sin datos
Ahora, exporte el reporte a Pdf y observe que los mrgenes estn dentro del limite, sin generar
hojas de mas, ni salirse de los mrgenes:

Bueno, hemos llegado al final de este tutorial, en un entrega posterior abordaremos las
imgenes en Reportes Locales y utilizaremos una Bd como fuente de datos para nuestro
reporte.
Saludos desde Monterrey, Nuevo Len Mxico!
Ejemplo C#
Ejemplo Vb.Net
Nota: El proyecto fue desarrollado en Vs2010 Ultmate usando Framework 4.0

Ejemplo de un reporte Visual


Studio (RDLC)
Publicadas por Carlos Juan a la/s 12:52 a. m.
Cual es la diferencia entre un RDL VS RDLC.
RDL = Reporte de Reporting Service (Si cuentas con reporting service)
RDLC = Reporte que no necesita Reporting Service. (Recomendado para web hosting)

1.) Seleccione Add new item y seleccione report, en nombre escriba: clientes.rdlc

Puede observar que se agrego el reporte a su web site, presione doble click sobre el
reporte clientes.rdlc

2.) El reporte esta en blanco... presione clic derecho sobre dataset y luego new dataset...

3.) En la pantalla de "Dataset Properties" se mostrara. Deje el nombre "DataSet1", en la


seccin de Data source precione "New..."

4.) En la ventana de "Data Source Configuration Wizard" , seleccione "New Connection.."

5.) En la ventana "Add Connection" complete la informacin de la conexin.

6.) Al completar la informacin del servidor se mostrara una pantalla como esta, precione
"Next >"

7.) En el siguiente paso complete la informacin solo esta en la imagen siguiente y


precione "Next >"

8.) En el ultimo paso, puede seleccionar los objetos a utilizar, seleccione la tabla
"Customers" y precione "Finish"

9.) Regresara a la pantalla "Dataset Properties" pero ahora no esta vaco los campos
"Data Source" y "Avaible dataset", complete la informacin tal y como se muestra en la
imagen y luego precione "OK"

10.) Regresa al reporte y aun esta vaco, relax pronto lo llenara. Precione clic derecho
sobre el reporte y luego Insert--> Table

11.) Ahora es tiempo de agregar los campos a la tabla, es muy fcil solo tiene que arrastrar
los campos.

12.) Abra la pagina "Defaul.aspx" si no la tiene crala, en esta pagina tiene que agregar los
controles "ScriptManager" y "ReportViewer".

13.) Ahora debemos de agregar el codigo de llenado, precione clic derecho "View code" y
agregue el siguiente cdigo, no olvide los using.

Aqu tienen su reporte, por lo que el resultado ser:

Agregando un filtro al reporte


Es posible que quieras agregar algn filtro, en el siguiente ejemplo filtraremos el pas.
14.) Lo primero ser abrir el Dataset "NorthwindDataSet.xsd"

15.) En la tabla de "Customers" clic derecho "Add Query"

16.) En la ventana "TableAdapter" Seleccione "Use SQL Statements"

17.) En la ventana "TableAdapter" Seleccione "Select which returns rows"

18.) En la ventana "TableAdapter" agregue al query el where "Country = @country"

19.) En la ultima pantalla puede agregar un nombre de query, complete la informacin tal y
como muestra la imagen y uego precione "finish"

20.) Finalmente llamaremos el query que acabamos de hacer y enviaremos un parmetro.

Resultado:

También podría gustarte