Escolar Documentos
Profissional Documentos
Cultura Documentos
Parvulos.Net
jueves, 10 de octubre de 2013 Archivo del blog
ReportViewer y Rdlc, ejemplo Factura (datos fijos) ► 2015 (5)
► 2014 (2)
Hola a todos:
El siguiente articulo pretende mostrar la manera de crear un reporte local usando ReportViewer y Local Report o ▼ 2013 (13)
Rdlc enlazando su origen datos (DataSource) a una fuente proveniente de una Lista Genérica de propiedades. ► diciembre (1)
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
▼ octubre (4)
imágenes posibles, traten de realizar el ejemplo siguiendo el tutorial, si un paso no les queda claro siéntanse con ReportViewer y
toda confianza de hacer las consultas necesarias, al final del articulo tendrán el link de descarga del proyecto de Rdlc, ejemplo
ejemplo. Factura (Base
de dato...
Los datos los enviaremos desde un formulario simulando ser los datos de una Factura comercial, que contiene Agregar una Base
Datos del cliente y los artículos adquiridos. de datos
SqlCompact a
Bien, comencemos creando un Formulario y arrastrando los controles necesarios hasta obtener un formulario un proyecto...
como este: App. Config,
cadenas de
conexión
ReportViewer y
Rdlc, ejemplo
Factura (datos
fijos)...
► septiembre (2)
► agosto (3)
► julio (3)
Datos personales
Agregue un segundo formulario, llámelo FacturaRpt.cs este contendrá el control ReportViewer al cual enlazaremos
el LocalReport, asi que agregue uno arrastrándolo desde el cuadro de herramientas.
José Luis García Bautista
Desarrollador de software con
experiencia en tecnologías
microsoft usando lenguajes
como : * C# * Vb.Net * Vba *
SqlServer * SqlCe * Access... y
Java como lenguaje
secundario...
Ver todo mi perfil
Formulario de contacto
Nombre
Agregue un LocalReport, deje el nombre default:
Correo electrónico *
Mensaje *
Enviar
Seguidores
Seguidores (16)
Seguir
Entradas populares
ReportViewer y Rdlc, ejemplo
Factura (datos fijos)
Ahora, crearemos las clases contenedoras de las entidades, recuerde que una entidad esta compuesta por
campos y propiedades. Programación en 3 capas
Inserte una nueva clase y nómbrela EArticulo, la cual contendrá todas las propiedades de la entidad Articulo, la Pasar datos de un
clase deberá de quedar con esta estructura: DataGridView a otro
DataGridView ubicados en
Forms diferentes
Código C#:
App. Config, cadenas de
namespace ReportViewerInvoiceReport_CSharp
conexión
{
public class EArticulo Llenar DataGridView con
{ datos de TextBox’s usando
public int Numero { get; set; } Datasource o el método Add()
public string Upc { get; set; }
public string Descripcion { get; set; } Agregar una Base de datos
SqlCompact a un proyecto de
public decimal Piezas { get; set; }
Visual Studio
public decimal Precio { get; set; }
public decimal Importe { get; set; } Trabajar con archivos Excel
} desde WindowsForms
} (SpreadSheetLight)
ReportViewer y Rdlc, ejemplo
Código Vb.Net: Factura Eviar Imagen
Public Class EArticulo ReportViewer y Rdlc, ejemplo
Public Property Numero() As Integer Factura (Base de datos)
Public Property Upc() As String
contextMenuStrip y
Public Property Descripcion() As String DataGridView
Public Property Piezas() As Decimal
Public Property Precio() As Decimal
Public Property Importe() As Decimal
End Class 9
Después inserte una nueva clase y nómbrela EFactura, esta clase contendrá todas las propiedades del
encabezado de la factura, la clase deberá de quedar con esta estructura:
Código 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>();
}
}
Código 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 Solución
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 botón Nuevo:
Seleccione Objeto y haga Click sobre el botón Siguiente:
Seleccione la clase EFactura, recuerde que esta clase contiene las propiedades para el encabezado de la factura
y haga Click sobre el botón Finalizar (Si no hubiera generado el proyecto estas clases no estarían visibles, así que
si no las ve por favor cierre la ventana y genere la solución):
Observe que ya tiene una fuente de datos seleccionada, solo haga Click en el botón 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 tamaño y encabezado del informe
Active la regla del informe para ello menú Informe –> Regla
Configure el tamaño 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
orientación se haya elegido, en este caso el ancho es lo que interesa, considere que tiene un ancho máximo de
21.59 cm. a este espacio le restara el valor total de los márgenes 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 diseño 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 campopropiedad de la clase tiene que crear un control Cuadro de texto para poder visualizar el
dato…esto 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 pequeños 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 fácilmente
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á
difícil 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 diseño,
tener activada esta casilla permite que el control cambie de tamaño en tiempo de ejecución adecuándose al
tamaño del valor que contiene, modificando con esto el diseño hasta el punto de generar hojas innecesarias.
En este ejemplo el campo Factura será del tipo numérico por lo cual para conservar un formato de numero
correcto, tendrá que configurar el lenguaje que utilizara el campo, para mi ubicación (México) la configuración de
lenguaje será “esMex”, para configurar esta propiedad:
Seleccione el control cuadro de texto –> Presione F4:
Si no hiciera esto, un formato numérico podría no mostrarse correctamente por ejemplo la cantidad Mil doscientos
cincuenta y seis con cincuenta y seis decimales en México será 1,256.56 pero en España se escribiría de esta
manera 1.256,56. Esta configuración debemos de hacerla aun si en la clase Main de nuestro proyecto hayamos
definido un lenguaje de manera predeterminada.
Agregar parámetros al Reporte:
Para abarcar mas sobre el tema de ReportViewer y local report, subamos un poco mas el nivel de nuestro
proyecto agregando parámetros 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 parámetro y nómbrelo 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 diseño del informe:
Para el detalle del informe, agregue un Tabla arrastrándola desde el cuadro de herramientas, vaya a las
propiedades de la tabla recién 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.
Después 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 tamaño de fuente, borde, tipo de dato, lenguaje a utilizar (recuerde lo comentado anteriormente
sobre el formato de numero/moneda)
¿Como va nuestro diseño de informe?
Si tienen un resultado como este, pueden dar su tarea por terminada en cuanto al diseño del informe si aun no lo
logran, todo es cuestión que revisen como configurar un control TextBox o cuadro de texto como gusten llamarlo y
ponerse a ver Alineación, tipo de fuente, borde, relleno, etc…
Hasta aquí daremos por terminado nuestro diseño, ahora vayamos a:
Establecer una Lista Genérica 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 diseñado)
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 función 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, después ubique el Evento que le interese implementar en este caso nos interesa el evento
“Load”.
Copie y pegue el siguiente código:
Código C#:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using 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 parámetros 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();
}
}
}
Código 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,
Después de generado el evento trate de seguir estas líneas de código, escriba linea por linea si copia y pega será
mas complicado que comprenda (suponiendo que su experiencia en desarrollo no es amplia):
Código C#:
using System;
using System.Collections.Generic;
using System.Linq;
using 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 García Bautista</autor>
/// </summary>
/// <returns>Una lista generica de la clase artículo</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 = "Descripción del artículo 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 = "Descripción del artículo 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 = "Descripción del artículo 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 Número
//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 diseño.
//
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 método de extensión 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();
}
}
}
Código Vb.Net:
Public Class Form1
''' <summary>
''' Funcion encargada de llenar el control DataGridView
''' <autor>José Luis García Bautista</autor>
''' </summary>
''' <returns>Una lista generica de la clase artículo</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 = "Descripción del artículo 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 = "Descripción del artículo 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 = "Descripción del artículo 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 Número
'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 diseño.
'
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 método de extensión 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 aplicación:
Llenamos los datos:
Presione el botón Imprimir, si siguió al pie de la letra el Articulo tendrá un reporte como este:
Observe, en el reporte el Formato numérico y Módena, al igual que no tenemos hojas de mas sin datos…
Ahora, exporte el reporte a Pdf y observe que los márgenes están dentro del limite, sin generar hojas de mas, ni
salirse de los márgenes:
Bueno, hemos llegado al final de este tutorial, en un entrega posterior abordaremos las imágenes en Reportes
Locales y utilizaremos una Bd como fuente de datos para nuestro reporte.
Saludos desde Monterrey, Nuevo León México!
Ejemplo C#
Ejemplo Vb.Net
Nota: El proyecto fue desarrollado en Vs2010 Ultímate usando Framework 4.0
Publicado por José Luis García Bautista en 22:49
+9 Recomendar esto en Google
151 comentarios:
Anónimo 22 de octubre de 2013, 12:58
Hola Jose Luis muy interesante tu aporte. Yo quiero hacer algo muy parecido pero con un DataReader y
con formularios donde el usuario de iformacion como filros y al darle aceptar le mande los reportes,
aunque mis conocimientos aun son pocos por que stoy entrando a programar en C# ando buscando
información y poder lograrlo. Saludos
Responder
José Luis García 23 de octubre de 2013, 22:49
Hola:
Me alegro que te haya gustado y espero se haya sido de utilidad, con el tema del DataReader si te animas
a usar listas genéricas (que de echo deberías de ir despegándote del DataTable) seria prácticamente lo
mismo lo unico que cambia es la manera de llenar la fuente de datos, pero todo lo demas que se a visto
en este articulo seguiria igual...espero pronto poder subir un articulo sobre el tema que planteas para
aclararte mas el panorama....
Saludos
Responder
Respuestas
Jaimesco 5 de enero de 2017, 18:58
Hola jose
una pregunta que tal si tengo 3 tablas
estudiante(cod_est, nombre, fechanac, foto)
padres (cod_pad, nombre)
disciplina (cod_dis, cod_est, cod_pad, descripción, fechafalta)
la pregunta es como hacer un reportin con c# en el que se pueda visualizar en el reporte (al,
momento de la impresión) el campo foto de la tabla eestudiante.
osea que se pueda ver las descripciones disciplinarias de cada estudiante con sus respectivas
foto
si me ayudas te lo agradecería no se como hacerlo
Responder
German Mauro 27 de octubre de 2013, 23:16
Esta muy bueno, yo hago algo parecido, peeero, tengo los detalles, y para el encabezado necesito, los
datos del presupuesto, para eso tengo una funcion que me devuelve una entidad con las propiedades. El
problema es que no me aparece como una opcion cuando elijo el origen de datos, solo aparecen las
funciones que devulven listas
Responder
José Luis García 28 de octubre de 2013, 20:40
Hola Germán:
Me da gusto que te haya gustado el articulo y ojala te haya servido para tu propósito, con respecto a lo
que comentas, en el mismo articulo explico del porque únicamente puedes enlazar objetos del tipo List<>
y es que necesitas objetos que implementen Ienumerable, esto es así tanto si usas un DataTable como si
usas Generic list ya que ambos lo implementan, pero esto no es problema, crea el DataSource de tu
encabezado normalmente y asignas una lista, no le veo problema; la otra opción aunque no tan elegante
seria que para los encabezados insertaras Parámetros para asignarle valores desde las propiedades de tu
entidad simple sin mas ni mas.
Saludos desde Monterrey, Nuevo León, México!
Responder
carmen lm 29 de octubre de 2013, 12:02
interesante tu aporte. ... yo hago un reporte similar pero desde mi base de datos, esta todo super. Pero yo
necesito generar el reporte sin vista previa es decir imprimir desde un botón sin mostrar el reporte por
favor alguna idea???
Responder
Respuestas
José Luis García 29 de octubre de 2013, 20:14
Hola Carmen:
La verdad no veo porque hacer esto que deseas y complicarte la vida, si el reportviewer no te
quita mucho tiempo pero, bueno tus razones has de tener:
La verdad nunca lo he intentado pero aqui tienes un tutorial del propio Microsoft, espero te sea
de utilidad;
http://msdn.microsoft.com/eses/library/ms252091.aspx
JONATHAN VELAZQUEZ 21 de junio de 2016, 14:09
tiene que crear un visor en donde se lo asines al boton de vista previa... y al visor le asginas
los datos para el reporte esta sencillo
JONATHAN VELAZQUEZ 21 de junio de 2016, 14:11
tiene que crear un visor en donde se lo asines al boton de vista previa... y al visor le asginas
los datos para el reporte esta sencillo
Jose Antonio Chavez Verdin 27 de agosto de 2016, 18:47
Yo necesito hacer lo mismo ya que estoy diseñando el recibo de un punto de venta y quiero
que la cajera que opera el spoftware no le de click al boton imprimir del reportviewer, que salga
directo.
Jose Antonio Chavez Verdin 27 de agosto de 2016, 18:51
Yo necesito hacer lo mismo ya que estoy diseñando el recibo de un punto de venta y quiero
que la cajera que opera el spoftware no le de click al boton imprimir del reportviewer, que salga
directo.
Responder
Luisfer 17 de diciembre de 2013, 8:35
Donde se debe colocar los ensamblados cuando se agregan a un reporte .rdlc cuando uno esta trabajando
con el Business Intelligent Development Estudio y cuando uno publica en reporting services es necesario
colocar estos ensamblados en una ruta esecifica dependiendo si se esta depurando o en un ambiente de
publicación. Estoy migrando mis reportes para que no sean remotos sino locales y me esta saliendo un
error de que no encuentra el ensamblado, donde lo debería agregar??
Responder
Unknown 4 de enero de 2014, 23:24
Excelente tutorial José Luis.
Estoy haciendo un pequeño programa para pasar las facturas electrónicas de xml a pdf y me ayudó
mucho.
Me surgió un curioso problema que te quiero comentar.
Creé una clase parecida a tu EArticulo y de ella instancio un objeto llamado linea.
Creé una colección generica de objetos "linea", llamada "lineas"
Como tengo que leer del xml, y no se cuantas lineas tiene la factura, creé un bucle dentro del cual se
llena el objeto "linea" y a continuación se añade a la colección "lineas" con el método add.
De momento todo bien. El problema aparece al llenar la colección, porque la llena con tres elementos
iguales a la última linea (la factura que leí, tiene tres lineas distintas). Depuré el codigo paso por paso y
llegué a la conclusión de que el problema estaba en que el método add, al añadir un objeto a la colección
lo hace "por referencia", es decir, lo que almacena es un puntero hacia el objeto "linea". Al cambiar el
valor del objeto en el bucle siguiente, se cambian automáticamente los datos ya almacenados, y al final,
todos los elementos de la colección son iguales.
Como solución provisional, instancio el objeto "linea" justo antes de entrar al bucle y lo destruyo con
nothing al terminar de añadir el objeto a la colección. Así funciona bien, pero debe haber alguna otra
solución mas "elegante" ¿no?
Responder
Unknown 4 de enero de 2014, 23:34
Vaya, mi comentario salió como "Unknown"
Me llamo Oscar González
Responder
José Luis García Bautista 5 de enero de 2014, 0:37
Hola:
Me da muchos gusto que el tutorial haya sido de utilidad para tus propósitos, muchas gracias por tus
comentarios y gracias también por tomarte el tiempo de hacerlo, eso motiva a seguir compartiendo
conocimiento.
En relación a tu caso, seria cuestión de ver como es que lo estas haciendo a simple vista no logro ver la
dimensión del problema ni una posible solución.
Si te es posible mándame tu correo por medio del formulario de contacto y vemos como poder
resolverlo...tal tu también podrías ayudarme con un tema sobre facturación que estoy enfrentando
actualmente.
Saludos desde Monterrey, Nuevo León, México!
Responder
Respuestas
Unknown 6 de enero de 2014, 15:37
Hola José Luis.
Al contrario, gracias a gente como tu, que comparte sus conocimientos, podemos aprender
algo los demas.
Te envié mi email, aunque no creo poder ayudarte mucho, porque yo no me dedico a la
programación. Trabajo en algo que no tiene nada que ver, y en mis ratos libres, que no son
muchos, hago algún programita sencillo.
Comenté aquí este problema, porque me pareció que que con el se entiende muy bien lo de los
tipos de datos (por valor y por referencia), ademas de que le encontré una utilidad que no
conocía al método de crear objetos en dos lineas (en una línea se define el objeto y en otra se
crea).
Abusando un poco de tu amabilidad, te comento que ya estoy terminando el programa para
pasar de xml a pdf,pero estoy un poco atorado con el asunto del qrcode.
Ya se como generarlo, y consigo verlo en cualquier formulario, pero no en el informe.
Intenté poner una imagen y que la carge desde una ruta local (C:\qrcode.jpg por ejemplo)
tambien intenté crear una propiedad en una clase en la que se guarde la imagen y pasarsela al
informe igual que los demas datos, pero nunca me sale la imagen.Me sale un icono pequeño,
como de imagen rota.
No se si estoy guardando mal la imagen, o no referencio bien la ruta con las expresiones...
Si sabes como poner una imagen variable en un informe, telo agradecería mucho.
Saludos
Oscar Gonzalez
Responder
Anónimo 8 de enero de 2014, 16:12
Saludos, tengo una duda, como se puede mandar a impresión tu reporte sin ver el formulario de vista
previa ??
Responder
José Luis García Bautista 8 de enero de 2014, 20:53
Hola:
Me hubiera gustado que mencionaras tu nombre para saber a quien me dirijo...
En relación a tu pregunta te comento que no he tenido la necesidad de hacerlo, pero te dejo este Link
donde se menciona como hacer esto que deseas:
http://social.msdn.microsoft.com/Forums/enUS/57692388f2344cc09b554899a0c7e0b5/printingardlc
directlytoaprinter
Y este otro del propio Msdn con un ejemplo bastante claro:
http://msdn.microsoft.com/enus/library/ms252091(VS.80).aspx
Responder
Santos Roberto Poot Montiel 22 de enero de 2014, 20:27
Excelente tutorial, Jose Luis, me va a servir de mucho, pues estaba luchando con los reportes
Responder
José Luis García Bautista 22 de enero de 2014, 20:56
Hola Santos:
Que gusto que el articulo sea de utilidad, cuando empece con el tema de los reportes la verdad me costo
mucho comprenderlos sobre todo porque los tutoriales que encontraba o estaban en ingles y no eran
claros o estaban en español y tampoco estaban completos y cuando estas comenzando y desconoces
tantas cosas, un paso sin mencionar manda todo lo demás a la basura porque resulta estresante andar
adivinando.
No dudes en compartir el articulo y suscribirte al blog si lo deseas, muy pronto subiré mas artículos.
Saludos desde Monterrey, Nuevo León, México!
Responder
Anónimo 1 de febrero de 2014, 0:13
Muy Buen Post
Responder
LORENA URIBE OSORIO 6 de febrero de 2014, 9:55
HOLA JOSE LUIS, EXCELENTE EXPLICACIÓN MUCHISIMAS GRACIAS POR COMPARTIR TUS
CONOCIMIENTOS, ME SIRVIO MUCHISIMO.
Responder
Anónimo 7 de febrero de 2014, 0:31
Hola José Luis, excelente tutorial, muy bien explicado, es lo que tanto andaba buscando, muchas gracias
por la información. saludos.
Responder
José Luis García Bautista 7 de febrero de 2014, 23:45
Hola:
Lorena, muchas gracias por tus comentarios, la idea fue esa precisamente ofrecer un manual completo,
como el que me hubiera gustado a mi encontrar en su momento. Tenemos temas pendientes que subir los
cuales no se han podido lograr por falta de tiempo pero, espero pronto poder subirlos.
No dudes en compartir el link y suscribirte al blog.
Saludos desde Monterrey, Nuevo León, México!
Responder
José Luis García Bautista 7 de febrero de 2014, 23:47
Hola "Anonimos":
Me hubiera gustado que publicaran su nombre para asi dirigirme a ustedes por su nombre. Gracias por sus
comentarios motivan a seguir publicando.
No duden en compartir el link y suscribirse al blog.
Saludos desde Monterrey, Nuevo León, México!
Responder
Vladimir Martinez 10 de febrero de 2014, 21:14
brother tengo un problema con el proyecto que isistes yo estoy en visual studio 2013 y me dice en esta
parte lo siguiente cuando lo escribo y lo termino dice
incoherencia de accesibilidad ; es menos accesible que en el campo
public List Detail = new List();
ayudame por favor
mi nombre es Vladimir Martinez mi email es vladimirmartinez_2@hotmail.com
Responder
Vladimir Martinez 10 de febrero de 2014, 21:16
Esto es lo que me dice no se si me puedes ayudar es con los dos con Invoice y detail me sale este error
ayudarme por favor que es mi ultimo ejercicio please
Error 1 Incoherencia de accesibilidad: el tipo de campo 'System.Collections.Generic.List' es menos
accesible que el campo 'ReportViewerInvoiceReport_CSharp.FacturaRpt.invoice'
C:\Users\Keiry\Documents\Visual Studio
2013\Projects\ReportViewerInvoiceReport_CSharp\ReportViewerInvoiceReport_CSharp\FacturaRpt.cs 20
35 ReportViewerInvoiceReport_CSharp
Responder
Respuestas
Anónimo 18 de febrero de 2014, 10:28
tengo el mismo problema, no se como resolverlo
ayudenme
Vladimir Martinez 18 de febrero de 2014, 12:04
Anonimo sabes cual es el problema y como lo solucione El codigo de mi amigo esta bueno y
funciona exactamente original
el problema se da por que en la clase tu no le as puesto public por eso da el problema solo la
declarastes predetermidamente que solo es class
pero en realidad es public class factura esto es un ejemplo
Cualquier duda avisa a mi amigo y que me escriba para poderte ayudar Estamos a las ordenes
de todos
gracias
Vladimir Martinez 18 de febrero de 2014, 16:19
Mandamelo a mi correo subilo en skyDriver para verlo y me mandas a mi correo
vladimirmartinez_2@hotmail.com o al ing.martinezchavez@gmail.com
Responder
Dovannys Hernández 18 de febrero de 2014, 9:03
Muy buen POST. Solo una pregunta: Se puede realizar igual en ASP.NET MVC?
Responder
Respuestas
José Luis García Bautista 19 de febrero de 2014, 22:02
Hola Dovannys:
Gracias por tu comentario, lamentablemente no tengo experiencia aun en ambientes web así
que no sabría decirte si aplica o no aplica.
Responder
Vladimir Martinez 18 de febrero de 2014, 12:03
Anonimo sabes cual es el problema y como lo solucione El codigo de mi amigo esta bueno y funciona
exactamente original
el problema se da por que en la clase tu no le as puesto public por eso da el problema solo la declarastes
predetermidamente que solo es class
pero en realidad es public class factura esto es un ejemplo
Cualquier duda avisa a mi amigo y que me escriba para poderte ayudar Estamos a las ordenes de todos
gracias
Responder
Respuestas
José Luis García Bautista 19 de febrero de 2014, 22:00
Hola Vladimir:
Muchas gracias por interesarte en el artículo y me alegro que te haya sido de utilidad, también
muchas gracias por compartir tu experiencia con el usuario "Anonimo" que espero lo haya
solucionado con tu aporte.
Generemos conocimiento entre todos!
No olvides compartir el artículo y suscribirte al blog, próximamente subiré otros artículos que
podrían ser de tu interés!
Responder
Edy Alberto Mejia Hernandez 21 de febrero de 2014, 23:31
Solo tengo una palabra para ti. Gracias
Responder
Respuestas
José Luis García Bautista 22 de febrero de 2014, 12:14
Hola Edy:
Muchas gracias por tu comentario, me alegro que el articulo te haya sido de utilidad.
No olvides suscribirte al blog, esto es un motivante para seguir publicando.
Responder
Luis Ilian Herrera 22 de febrero de 2014, 17:06
Hola Excelente Articulo. Amigo tengo una duda, estoy haciendo un informe donde tiene campos estaticos
es decir no es una lista o tabla indeteminada de datos, digamos es un informe estilo factura donde tiene
un numero fijo de datos, este informe solo tiene dos paginas, donde relleno los campos de estas paginas
de acuerdo a la consulta a la base de datos. el problema que tengo es que necesito poder tener esas dos
paginas en diseño en el archivo rdlc, pero por mas que he buscado solo puedo tener una, y necesito poder
diseñar la segunda. agradezco la ayuda que me puedas dar.
Responder
Respuestas
José Luis García Bautista 22 de febrero de 2014, 17:25
Hola Luis:
Lamentablemente esto que quieres hacer aun no lo he logado, lo intente varias veces pero al
pareces esto no es posible, no obstante te dejo este link probablemente te de alguna idea:
http://msdn.microsoft.com/enus/library/ms251701(v=vs.90).aspx
Saludos desde Monterrey, Nuevo León, México!
Luis Ilian Herrera 22 de febrero de 2014, 19:01
Muchas gracias, de todas formas me toca seguir investigando, por que es necesario para lo
que necesito hacer.
Responder
Anónimo 7 de marzo de 2014, 10:46
HOLA AMIGO MUY BUEN APORTE AGRADESCO MUCHO YA QUE EXPLICAS TODO BIEN ... CHIDO
AMIGO MUCHAS GRACIAS.
Responder
Respuestas
José Luis García Bautista 10 de marzo de 2014, 20:23
Hola Anónimo:
Muchas gracias por tus comentarios, no olvides compartir el enlace para que mas gentes se
sirvan de este articulo.
Saludos desde Monterrey, Nuevo León, México!
Responder
Agustina N. 10 de marzo de 2014, 0:54
Hola, muy bueno tu aporte, pero intente hacerlo y cuando quiero agregar los objetos en el reporte (origen
de datos ) no me aparecen... probé guardando, ejecutando el código, cerrando y volviéndolo a abrir y
tampoco...
Responder
Respuestas
José Luis García Bautista 10 de marzo de 2014, 20:26
Hola Agustina:
Creo que no leíste bien el articulo, o te pasaste por alto esta parte:
{...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 Solución...}
Prueba con eso y me comentas como te va!
Saludos desde Monterrey, Nuevo León, México!
Responder
Anónimo 26 de marzo de 2014, 10:16
Hola!
Hola!
He intentado de mil maneras que se autoimprima el reporte. Pero no hay manera. Ni siguiendo las
instrucciones de Microsoft.
Alguien sabe cómo hacerlo?
Muchas gracias!
Responder
Teo Renteria 26 de marzo de 2014, 15:16
Hola Jose Luis
Me pareció muy útil este tutorial, estoy haciendo algo parecido pero con orígenes de datos dinámicos
y estoy llenando el report viewer manualmente ya q mis procedimientos tardan demasiado y por
cuestiones de timeout lo tengo que hacer manualmente y no me carga absolutamente nada
este es mi código si pudieras ayudar te agradecería mucho
SqlDataAdapter sqlAdaptador;
SqlConnection sqlConexion = new SqlConnection();
DataSet dt = new DataSet();
try
{
sqlConexion.ConnectionString = ConfigurationManager.ConnectionStrings["IMArk"].ConnectionString;
sqlConexion.Open();
sqlAdaptador = new SqlDataAdapter(sConsulta, sqlConexion);
sqlAdaptador.SelectCommand.CommandTimeout = 0;
sqlAdaptador.Fill(dt);
Microsoft.Reporting.WinForms.ReportDataSource rds = new
Microsoft.Reporting.WinForms.ReportDataSource("Datos", dt.Tables[0]);
reportViewer1.LocalReport.ReportPath = "ReportTop100.rdlc";
// reportViewer1.LocalReport.DataSources.Add(new
Microsoft.Reporting.WinForms.ReportDataSource("DataSetInformeFidelizacion", dt.Tables[0]));
reportViewer1.LocalReport.DataSources.Add(new
Microsoft.Reporting.WinForms.ReportDataSource("Datos", dt.Tables[0]));
reportViewer1.Refresh();
}
catch (Exception ex)
{
}
Responder
Anónimo 16 de abril de 2014, 3:00
Ya era hora de que alguien creara un blog para problemas con ReportViewer.
Soy nuevo en esto y me gustaria hacer una pregunta que me trae loco.
Resulta que tengo un report y dentro de este tengo otro report. Quiero pasarle unos parametros del primer
report al segundo pero cuando los defino me llegan al segundo report a null y no me muestra la
informacion.
Los parametros son campos de la clase he probado a escribir directamente un texto y si aparecen en el
subreport pero si es un campo de la clase no va.
Espero que alguien pueda ayudarme con este problema.
Gracias.
Responder
Angelo 28 de abril de 2014, 9:53
Excelente aporte!!! me ha funcionado de maravillas al enlazarlo a un objeto de un servicio web.
Un saludo desde www.systemdeveloper.info
Responder
Anónimo 3 de mayo de 2014, 8:59
Necesito que por cada registro en la darse de dato mostrar una pagina de reporte rdlc. Necesito hacer una
combinación de correspondencia
Responder
Jonatan 26 de mayo de 2014, 10:36
Buenas, en primer lugar enhorabuena por el articulo!
Estoy realizando un programa en C# el cual maneja una base de datos sqlite para almacenar datos de
clientes, proveedores, distribuidores, etc!
El programa tiene como fin visualizar un informe el cual recoge dos recetas en un mismo folio!
Mi problema es que necesito hacer una plantilla para una receta y pasarle un List de una clase que tengo
al igual que tu, y que muestre doble esa receta! No se si me he explicado, pero haber si me pueden
ayudar, gracias.
Responder
jgarale 2 de junio de 2014, 23:06
hola, me gusto mucho el tutorial, solo que tengo un problema, me marca un error, me dice que
"dgvdetalle" no esta declarado, y en efecto busco en el código, pero no encuentro en que momento se
declara "dgvdetalle". ojalá me pudieras ayudar muchas gracias.
Responder
Respuestas
José Luis García Bautista 2 de junio de 2014, 23:12
Hola Jgarale:
El dgvDetalle fue agregado al proyecto en tiempo de diseño, descarga el codigo que se ofrece
mas abajo esta disponible tanto para C# como para Vb.Net..
Saludos desde Monterrey, Nuevo León, México!
Responder
jgarale 2 de junio de 2014, 23:07
hola, se me pasó mencionar que estoy usando visual basic 2010
Responder
jgarale 2 de junio de 2014, 23:11
hola, perdón que oso, jajaja... ya me di cuenta que asi se llama el datagridview muchas gracias. saludos
Responder
Anónimo 10 de junio de 2014, 13:28
Gracias por el tuto,me sirvio mucho :)
Responder
Sergio Diaz 11 de junio de 2014, 18:35
Hola, muy buen tutorial, me podrías ayudar con la siguiente línea
reportViewer1.LocalReport.SetParameters(parameters);
Me marca el siguiente error
No se controló Microsoft.Reporting.WinForms.LocalProcessingException
Gracias
Responder
Respuestas
Brianda Uriarte 6 de noviembre de 2014, 11:38
Me surgió el mismo error como le dio solución??
José Luis García Bautista 6 de noviembre de 2014, 21:10
Hola Brianda Uriarte:
Analiza este articulo, ahi se mencionan las posibles soluciones a la excepction que estas
obteniendo:
http://stackoverflow.com/questions/6297282/howtofixthebuglocalprocessingexceptionwas
unhandledwhenpassingparamet
Si esta es la solución no olvides comentarnos.
Responder
Sergio Diaz 11 de junio de 2014, 18:49
Wuju!!!! ya encontré el error (el nombre del cuadro de texto de los parametros los tenía incorrectos).
Saludos.
Responder
Anónimo 18 de junio de 2014, 22:20
Esto es la solución QRcode, veo, espero poder ayudarle a:'descargar ejemplo qrcode en visual c#.net
Responder
Anónimo 18 de junio de 2014, 22:22
Esto es la solución QRcode, veo, espero poder ayudarle a: descargar ejemplo qrcode en visual c#.net
Responder
Respuestas
José Luis García Bautista 18 de junio de 2014, 22:57
Hola Anónimo:
Seria interesante conocer tu nombre para saber a quien agradecerle el aporte del BarCode,
usare la Dll para mostrar como poner una imagen en un RDLC...
Saludos desde Monterrey, Nuevo León, México!
Responder
Ralex Bárcenas 23 de junio de 2014, 9:32
Excelente tutorial Compadre!! Me salvaste la vida...
Gracias!!!
Responder
José Luis García Bautista 23 de junio de 2014, 13:23
Hola Ralex:
Me alegro que te haya servido el articulo.
Saludos desde Monterrey, Nuevo León, México!
Responder
Iván Sánchez 27 de junio de 2014, 4:17
Excelente tutorial! Muchas gracias porque la verdad que no he encontrado nada ni la mitad de bueno.
Únicamente tengo un problema, he seguido todo el tutorial pero cuando relleno los datos y pulso Imprimir,
me aparece el reportviewer vacío. He comprobado que tiene asociado el report1.rdlc pero aún así nada de
nada :'( ¿Alguna idea? Gracias nuevamente, un saludo.
Responder
Respuestas
Iván Sánchez 27 de junio de 2014, 4:37
Hola de nuevo, me respondo con la solución a mí mismo, le había puesto otro nombre a los
parámetros y no intersectaba el error de que no se podía cargar porque el nombre del parámetro
Title pasado no existía ;D Ahora todo perfecto! Muchísimas gracias.
José Luis García Bautista 27 de junio de 2014, 20:13
Hola iván:
Gracias por tus comentarios, lamentablemente no tengo acceso al blog desde el trabajo y solo
veo los comentarios hasta tarde, lamento no haber podido asistirte y me alegro que hayas
encontrado la solución por ti mismo.
Saludos desde Monterrey, Nuevo León, México!
Responder
cesar maza 11 de julio de 2014, 14:59
Muy Buen aporte.
Tengo un Reporte(R1) que contiene campos con hypervinculos que abren un reporte(R2), Quisera saber
como hacer para que al Exportar el R1 a Excel ,no se Creen los Hypervinculos..
Agradecería si alguien me ayuda con este tema,Estoy usando C#2012
Responder
Francisco 20 de julio de 2014, 19:11
Gran aporte.
Pero no se si me puedas ayudar... lo que quiero es mostrar imágenes ( las cuales pueden cambiar registro
a registro ). lo único que he logrado es que muestre solo una (la primera) pero las demás se repiten. Las
imágenes y los textos a mostrar están guardadas dentro de los objetos del List<>.
Gracias !!
Responder
Carlos Andres Bonilla Cardona 24 de agosto de 2014, 17:37
Muchas gracias José Luis García Bautista, de verdad lo buscaba desde hace mucho tiempo, siempre
encontraba como hacerlo pero usando el asistente, ahora sé como hacerlo manualmente, que es lo que
me interesa. Estoy haciendo una aplicación que debe conectarse a una bd que se encuentra en otro
equipo y luego de un pago debe general un recibo el cual se debe guardar o imprimir. Me has ayudado
muchísimo, en serio, ahora mismo me pondré a adaptarlo a mi necesidad.
Responder
LA LEYENDA VIVIENTE 28 de agosto de 2014, 19:54
EXCELENTE APORTE:
pero tengo una dua o ayuda sobre tu programa,que en ves de tener dato fijo en el datagriw tener texbo que
llenen el datagriw para haci hacer reporte de vario detalle no de dato fijo
Responder
Respuestas
José Luis García Bautista 29 de agosto de 2014, 10:23
Hola: recuerda que la finalidad del artículo es mostrar como utilizar un LocalReport, sus
controles, parámetros y como enlazar su DataSource a una lista genérica de objetos. El origen
de los datos no importa puesto que podría ser cualquiera.
Lo que sugieres o deseas ver no es nada complicado bastará con que unas otro artículo de
este blog (en donde hablo de como llenar un control DataGridView usando dos técnicas
distintas) a este proyecto y listo! Tendrás el proyecto que deseas.
Si tienes alguna otra duda Siéntete libre de externarla
Saludos
J. Luis
Responder
EDTA 10 de septiembre de 2014, 19:06
Buenos dias Jose Luis
Muy interesante el aporte, de todas maneras tengo un pequeño problema (aparte de que estoy
comenzando y mis conocimientos son limitados). He ociado letra a letra tu proyecto y al imprimir report en
blanco. He bajado tu proyecto, imprimir y report en blanco.... No hay errores no hay nada. Tendra algo que
ver que sea Visual Studio 2013???.
Gracias por adelantado por echarme una mano. Tengo que terminar un pequeño programa que necesita
imprimir y aquí estoy esperando como agua de mayo..
Sldos
Responder
Respuestas
José Luis García Bautista 10 de septiembre de 2014, 21:08
Hola EDTA:
Si migraste la aplicación directamente probablemente haya alguna incompatibilidad en algún
fragmento de código o en el mismo Rdlc.
Te recomiendo que en lugar de bajar el reporte, intentes hacerlo tu desde cero en tu Visual
Studio 2013 siguiendo paso a paso este articulo, si aun si tienes dudas o problemas con gusto
podemos revisarlo uno a uno...
Espero poder ayudado un poco en la resolución de tu problema.
Saludos
J. Luis
Responder
Alvin Cat 22 de septiembre de 2014, 16:48
Hola Jose Luis:
Tengo un problema dentro del report ya que me imprime una hoja demas q tiene solo el encabezado,
espero puedas ayudarme
Responder
Respuestas
José Luis García Bautista 22 de septiembre de 2014, 17:04
Hola Alvin:
Analiza por favor lo que comentó en la sección. "Configurar tamaño y encabezado del informe"
ahí encontrarás el motivo del porque se te esta presentando esta situación.
Saludos
Alvin Cat 24 de septiembre de 2014, 10:51
como siempre tienes la razon, jaja q cabeza la mia, gracias por tu ayuda, y una consulta mas
por favor, quisiera insertar una imagen de un codigo qr por cada factura, lo q no logro hacer es
que la imagen cambie automaticamente para cada factura o reporte ya q el codigo qr tiene
datos unicos por factura, agradezco de antemano tu ayuda.
José Luis García Bautista 24 de septiembre de 2014, 21:14
Para el tema de la imagen QR tienes que agregar un objeto Imagen (si mal no recuerdo se
llama así) después en las propiedades de dicho objeto seleccionarías una opción que dice
Origen de base de datos y lo que le enviarías en seria un arreglo lo Bytes dicho arreglo de
bytes seria la imagen del QR descompuesto en bytes :D, si eres paciente te prometo que para
el Sábado subo un articulo que hable sobre los codigo QR en reportes locales...
Saludos
Responder
Karim Yunis Muñoz 22 de octubre de 2014, 13:45
como puedo crear un un reporte a partir de un dataset que lllene por codigo mediante una consulta a la
base de datos, ejemplo: dim dsDatos as Dataset = getDatos() // funcion que me trae un dataset de una
consulta a la base de datos
Responder
Respuestas
José Luis García Bautista 22 de octubre de 2014, 14:28
Hola: La primer sugerencia es que dejes de pensar en DataSet porque ya noves usan o no
deberían de usarse, la segunda busca dentro de los artículos del blog ahí encontraras un
artículo con nombre similar a este, ahí hablo sobre comí traer datos de una base de datos y
como se enlaza al DataSource de un LocalReport.
Si el artículo es de tu agrado considera unirte al blog o Compartir el artículo.
Karim Yunis Muñoz 22 de octubre de 2014, 15:01
Este proyecto está para ser descargado?
José Luis García Bautista 22 de octubre de 2014, 20:36
Hola Karim:
Claro, todos los articulos aqui creados tiene el proyecto disponible para su descarga, en caso
de que en alguno de ellos no lo encuentres por favor hasmelo saber para reparar el link.
Te dejo el link del articulo que comente en mi respuesta anterior:
http://joseluisgarciab.blogspot.mx/2013/10/reportvieweryrdlcejemplofactura.html
o búscalo por nombre:
ReportViewer y Rdlc, ejemplo Factura (Base de datos)
Ahí podrás encontrar como enlazar el DataSource del LocalReport a una base de datos.
Saludos
Karim Yunis Muñoz 23 de octubre de 2014, 6:21
Este proyecto donde lo puedo descargar?
Responder
Pablo Ruffo Claure 22 de octubre de 2014, 16:48
Te complicas demasiado, y confundes al resto, esto lo solucionabas con un Array de @parametros
Responder
Respuestas
José Luis García Bautista 22 de octubre de 2014, 20:33
Hola Pablo Ruffo Claure:
Me da gusto que visites el blog (aunque sea por curiosidad), en relación a tu comentario,
permiteme responder con varias puntos:
1. Seria bueno que extendieras tu aportación, comentas que lo solucionarías con un array de
parámetros, pero no comentas que arreglarías, si el paso de dos parámetros al encabezado del
reporte o quizás apuntes a llenar un reporte con un array de parámetros.
2. Seria bueno que nos compartieras tu solución al "problema", recuerda que el objetivo de este
blog es que expandamos el conocimiento, no solo yo si no el resto de la gente que diariamente
acude a el buscando guías para realizar sus actividades, al compartir, ganamos todos.
3. En el titulo del articulo se menciona que se tratara sobre listas genéricas, que hoy por hoy
forman parte de la médula de la programación orientada a objetos y son mil veces mas
potentes que un simple array.
4. Me gustaría también nos comentaras que parte del articulo te provoca confusión,
seguramente alguien mas del blog podría expandir la explicación para ayudarte a comprender el
articulo y sus objetivos o si es necesario crear un nuevo articulo donde se evite crear la
confusión que hoy te provoca, recuerda que el nombre del blog es "Parvulos .Net" y si alguien
no comprende del todo los temas aquí tratados entonces seguramente hay algo que cambiar.
Saludos desde Monterrey, Nuevo León, México!
Responder
Pedro Avila 22 de octubre de 2014, 20:59
Hola estoy de acuerdo con lo que dice José Luis la creación de este blog es con la finalidad de compartir
el conocimiento, no de tirar la piedra y esconderse.
Aparte que se enseña la creación de reporte, se esta enseñado a usar listas genericas fuertemente
tipadas, la cual tiene un mejor performance que un array.
Responder
L 31 de octubre de 2014, 13:21
Hola, gracias por este tutorial, me ha servido de ayuda.
Pero ahora me surge una duda: si por ejemplo necesito imprimir todas las facturas de un mes (o de un
año), ¿cómo podría hacer para unir todas estas facturas en un único informe de manera que se puedan
visualizar en el reportviewer como un único documento y además así se podrían imprimir todas de una
vez?.
Muchas gracias.
Responder
colimote79 5 de noviembre de 2014, 11:40
Gracias por tu aportación, es un excelente artículo. Creo que ya me puedo ir olvidando de los reportes con
el control "PrintDocument". Saludos!
Responder
Gustavo Esquivel 7 de noviembre de 2014, 21:04
excelente amigo un capo te felicito muy bien explicado
Responder
Respuestas
José Luis García Bautista 7 de noviembre de 2014, 21:59
Gracias Gustavo la idea era no confundir a los Párvulos sobre cómo usar estos controles y
clases.
Saludos
Responder
E.J. CHOCHOCA 8 de noviembre de 2014, 19:39
Gracias por su aporte amigo buen tutorial!!!!! saludos
Responder
Brayan Loayza 15 de noviembre de 2014, 17:36
MUCHISIMAS GRACIAS AMIGO FUNCIONA A LA PERFECCION MEJOR EXPLICADO NO PUEDE
ESTAR...!
Responder
Noelia Córdoba 6 de diciembre de 2014, 11:05
Hola! Muy buen aporte! Muchas gracias! Quería consultar si alguien sabe porque puede ser que si yo
tengo un reporte, similar a este, que es de una factura se repita el pie de pagina en otras dos hojas más
sin que hubiese detalles, ya que hago una validación para que carguen justo los que entrar en una pagina
A4. Si alguien sabe como resolverlo se lo agradecería mucho. Saludos
Responder
Respuestas
José Luis García Bautista 9 de diciembre de 2014, 20:34
Hola Noelia:
Una disculpa por responder hasta ahora, si supieras la cantidad de trabajo que tengo encima.
El problema que te es sucediendo es por la altura de tu reporte, muchas veces no
consideramos los margenes, los pie de paginas etc, en nuestro tamaño total.
Prueba reduciendo el tamaño de estos y veras como corriges tu problema.
Gracias por visitar Parvulos .Net
Responder
kloz 9 de diciembre de 2014, 15:54
Muy buen aporte, Jose Luis, me sirvio mucho, le realice unos cambios y me funciona perfecto, tienes
algun blog donde publiques tus aportes? si es asi me gustaria saber, ya que explicas muy bien
Responder
Respuestas
José Luis García Bautista 9 de diciembre de 2014, 20:43
Hola Kloz:
Gracias por visita Parvulos .Net, me da gusto que el articulo te haya sido de utilidad para tus
propósitos, no olvides darnos un voto y compartir el articulo.
Si estas interesado en recibir nuevos artículos podrías unirte al blog sin problemas.
Responder
Jorge Can 23 de marzo de 2015, 19:13
No puedo bajar el tutorial!!!
Responder
YGm Juan Andres 15 de abril de 2015, 9:05
hola tienes algun video de paso con el Código Vb.Net: de este tutorial ?
gracias hermano
Responder
YGm Juan Andres 15 de abril de 2015, 9:12
hola
EN: Agrege un segundo formulario, llámelo FacturaRpt.cs este contendrá el control ReportViewer al cual
enlazaremos el LocalReport,
en vb.studio 2013 con el Código Vb.Net:
no encuentro : ReportViewer o LocalReport , ya los busque en elegir elementos o en componentes .net
framerwork o componentes com pero no los localizo ?
de antemao muchas gracias por la ayuda
Responder
Kelvis Osvaldo Ferreras Arias 28 de abril de 2015, 9:49
Buenos días a todos, me sumo a todos aquellos "Agradecidos" por este gran aporte, así que muchas
gracias Jose Luis.
Planteo el problema que tengo:
Trabajo con VS 2013 y tengo un reporte que utiliza como dataset un objeto Cotizacion, el cual a su vez
tiene una propiedad cliente de tipo Cliente, la cual contiene los datos del mismo. El reporte visualiza sin
problemas los datos de la Cotizacion, pero no me muestra los datos de la propiedad cliente. Entiendo que
se debe a que la propiedad NO es de tipo primitiva, sino un objeto. Puede alguien decirme como puedo
mostrar los datos de esta propiedad?
Gracias anticipadas y saludos.
Responder
Respuestas
José Luis García Bautista 28 de abril de 2015, 23:57
Hola Kelvis:
Desafortunadamente el RDLC no permite entidades complejas como fuente de datos, por lo
cual tendras que crear una fuente de datos por cada objeto que desees mostrar y tendras que
cargar cada uno por separado...de otra forma no podras hacerlo.
Gracias por visitar Parvulos .Net, no olvides apoyar al blog visitando nuestros anuncios.
Saludos
Responder
Kelvis Osvaldo Ferreras Arias 12 de mayo de 2015, 15:40
Buenas tardes Jose Luis, muchas gracias por la solución. lo he hecho como indicaste y funciona
correctamente.
Ahora estoy intentando imprimir una factura en un punto de venta, con una impresora BIXOLON SRP 275
que utiliza rollo de papel continuo. Lo primero es que se debe imprimir directamente (sin mostrar la vista
preliminar) y lo segundo es que la altura del papel debe ser dinámica, es decir, determinada por la
cantidad de lineas de detalle a imprimir. He visto algunos ejemplos creando una imagen de la factura, pero
hasta el momento ninguno me ha funcionado.
Agradecería cualquier comentario que pudiera arrojarme un poco de luz al respecto. Un saludo.
Responder
Respuestas
José Luis García Bautista 12 de mayo de 2015, 20:46
Hola Kelvis:
Que bueno que te haya servido el consejo, mira en relacion a imprimir sin vista preliminar me
he encontrado con esta documentacion y ejemplo en la propia libreria de MSDN pero la verdad
nunca la he implementado pero te dejo este Link donde se menciona como hacer esto que
deseas:
http://social.msdn.microsoft.com/Forums/enUS/57692388f2344cc09b55
4899a0c7e0b5/printingardlcdirectlytoaprinter
Y este otro del propio Msdn con un ejemplo bastante claro:
http://msdn.microsoft.com/enus/library/ms252091(VS.80).aspx
En relación al tamaño del reporte esto realmente no importara porque al igual que se puede
generar un reporte de 1 hoja se puede crear uno de 10 y mientras tengas papel este se
imprimirá sin problemas, solo ojo con la configuración del pie de pagina para que no repita por
cada hoja que genere.
Saludos
Responder
colimote79 13 de junio de 2015, 11:38
Este comentario ha sido eliminado por el autor.
Responder
colimote79 13 de junio de 2015, 11:40
¡Que tal José Luis! Muchas gracias por este gran aporte, gracias a ello he podido integrar este tipo de
reporte en mis sistemas.
Quisiera hacerte una pregunta.
Tengo un reporte de facturas donde solo se listan las facturas que se realizaron entre un rango de fechas,
que tiene estos datos:
Reporte de Facturas entre rango de fechas
Folio 1, Factura 1, Fecha...
Folio 2, Factura 2, Fecha...
.....
Folio N, Factura N, Fecha...
Y otro con los detalles de la factura por separado, o sea, algo así:
Reporte de detalles de factura (Donde se especifica los productos que se compraron, con costo y
cantidad dentro de una sola factura)
Folio1, Factura1, Fecha...
| Codigo 1, Producto 1, Costo, Cantidad, Total |
||
| Codigo 4, Producto 4, Costo, Cantidad, Total |
||
| Codigo 9, Producto 9, Costo, Cantidad, Total |
Lo que necesito hacer es, que cuando de click en el "Reporte de Facturas" sobre el campo "Folio", me
envíe directamente al reporte de "Detalles de Factura" con los datos de los conceptos de la factura, o
sea, que si le doy click al "Folio 3" me envié al reporte de detalles de la factura con folio 3 (como un
hypervinculo). Se que se puede hacer configurando las "propiedades de marcador de posición" del texto
en la opción "Acción", pero no he podido hacer el brinco de un reporte a otro.
De casualidad tu sabes algo sobre este tema? te agradecería mucho si pudieras darme un norte.... y
gracias de nuevo. ¡Saludos!
Responder
Alexis Molina 1 de julio de 2015, 19:02
hola como puedo obtener tu proyecto en C#?, lo trate de descargar pero veo que no esta disponible, me
seria de mucha utilidad, Muchas gracias :), alexisxm1492@gmail.com
Responder
Respuestas
José Luis García Bautista 1 de julio de 2015, 19:55
Hola Alexis, es extraño esto que mencionas ahora mismo ingrese desde una computadora de la
oficina y si puedo descargar los archivos...
Saludos
Responder
juan manuel alvarez gonzalez 9 de julio de 2015, 17:54
buenas tardes José Luis García Bautista me gusaria que me proporcionaras tu proyecto debido a qeu no
lo puedo descargar desde tu publicacion en c# no se si ya no lo tines disponible o el link se ha caido me
seria de gran utilidad tu proyecto mi corre es bennigton21@gmail.com
Responder
Respuestas
juan manuel alvarez gonzalez 9 de julio de 2015, 18:10
ya sea en ese correo o en este jbennignos@hotmail.com
José Luis García Bautista 9 de julio de 2015, 21:21
Hola:
intenta descargarlo desde aqui:
http://1drv.ms/1Bmelcu
Responder
juan manuel alvarez gonzalez 10 de julio de 2015, 23:26
gracias me servira de mucho para mi proyecto
Responder
Brandon Palacios 30 de julio de 2015, 13:29
Este comentario ha sido eliminado por el autor.
Responder
A nombre de quien va a quedar 6 de agosto de 2015, 15:34
Excelente aporte, no cabe duda, muy bien explicado, esto me servira para realizar etiquetas.
Responder
Moises Mata Martinez 21 de agosto de 2015, 17:15
Buenas tardes, gracias por tu aporte me sirvio mucho ya que los reportes los tenia pensado realizar con
SQL Server Business Intelligence, e integralos a mi proyecto. Al igual por que me diste una idea de como
no usar un dataset en si y usar las clases para poder pasar la informacion al reporte sin la necesidad de
los dataset.
De antemano gracias y saludos.
Reynosa Tamps.
Responder
Unknown 14 de noviembre de 2015, 15:19
Responder
Unknown 14 de noviembre de 2015, 15:20
Hola Jose Luis he hecho todo desde 0 cero en visual basic.net con visual estudio 2013 sin embargo me
indica al emitir el reporte no se ha proporcionado ninguna instancia de origen de datos para el origen de
datos 'encabezado' me podrias ayudar con este inconveniente?
Responder
Cuervo Pablo 18 de noviembre de 2015, 11:02
Hola Jose Luis, me sirvió muchisimo este tutotial. Aprovecho para preguntarte si hay alguna forma para
incluir en el reporte Rich Text puesto que no he logrado hacerlos. Muchas gracias.
Responder
Unknown 19 de noviembre de 2015, 14:33
Hola Jose Luis. Me fue de mucha utilidad este tutorial. Ahora mi duda es si es que puedo hacer que un
report obtenga Datos De Varios Procedimientos almacenados. Osea Me explico varios datos de diferentes
tablas. y cada tabla en el caso tendria un procedimiento almacenado. Y que al Generar el report me salga
el resumen de todas las tablas en un solo report
Responder
Yusimy Barrios Frómeta 27 de noviembre de 2015, 15:09
Hola, muchas gracias, tu artículo me ha sevido de mucho, estoy trabajando en un pequeño proyecto para
generar reportes con dotos contenidos en un archivo de texto, y me ha ayudado mucho tu publicacion, ya
se como obtener los datos del archivo y visualizarlos en el reporte, pero tengo un problema, mi reporte
necesita de una portada con un buen diseño grafico, eso lo puedo hacer facilmente con las erramientas
que contiene en diseñador de reportes, pero ademas de eso quiero que mi informe tenga paginas de
contenido diferentes a la portada, necesito saber como puedo controlar la cantidad de paginas que va a
tener. Me puedes ayudar por favor?
Mi nombre es Yusimy Barrios Frómeta
Responder
Respuestas
José Luis García Bautista 29 de noviembre de 2015, 12:28
Hola Yusimy:
Lo siento, esto que solicitas los desconozco pero seria un buen aporte de tu parte compartir el
conocimiento si descubres como lograrlo.
Saludos
Responder
Denis Ortiz 28 de noviembre de 2015, 22:03
Revisando tu ejemplo se explica muy bien. Hay alguna forma de agregar una imagen por ejemplo el logo
de la empresa que emite la factura en el report viewer. Yo lo hice con el datareport del viejo vb pero
tratando con este control no. Esto porque los datos que carga van relacionados a datos de una tabla.
Gracias.
Responder
Respuestas
José Luis García Bautista 29 de noviembre de 2015, 12:27
Hola Denis:
Po ravor revisa el articulo:
http://joseluisgarciab.blogspot.mx/2015/11/reportvieweryrdlcejemplofactura.html
Ahi explico como hacer esto que deseas.
Saludos
Responder
Denis Ortiz 30 de noviembre de 2015, 14:57
Gracias por tu colaboración. Todo el proceso es entendible pero estoy usando VB 2010 pero en mis
plantillas no tengo el informe formulario o el Reporting. He descargado el Report Viewer de Microsoft y
agregado en la Referencia. Sin embargo no puedo agregar esa plantilla para poder usarla y asociarla al
report viewer. He buzeado en Google y ayuda msdn pero no lo he logrado. Te agradezco si me podrías
indicar algún link para poder agregar dicha plantilla.
Gracias por tu aporte.
Responder
Martin Lopez Jordan 19 de febrero de 2016, 13:39
Hola Jose Luis, muy buen post, te felicito por tu dedicación!
Te queria consultar un inconveniente que se me presentó. He agregado un origen de datos al Reporte, en
otro proyecto para asociarle los campos y salió de maravilla. Luego, creo una clase nueva dentro del
mismo proyecto y no me aparece en Conjuntos de datos disponibles. Recompile la solucion y todos los
proyectos, a que se puede deber el inconveniente? Muchas gracias
Responder
Flavio 1 de abril de 2016, 11:30
Una consulta,Estoy haciendo registro de factura con bd real, quiero editar y cambiar detalle de factura,
digamos que el cliente registra una cantidad de articulos, y sucede que quiere editar y eliminar ciertos
articulos del detalle y agregar otros articulos,como puedo hacer para que se actualice en la bd?,porfa
alguna sugerencia
Responder
Respuestas
José Luis García Bautista 2 de abril de 2016, 9:28
Hola:
Podrías mostrar el detalle en un DataGridview como lo muestra el ejemplo, para esto lo que yo
recomendaría es que cargaras toda la información en un lista de clases, despues para poder
eliminar un item del detalle bastara con que selecciones el Row y presiones una tecla "Supr"
por ejemplo, en la programacion de la tecla tendras que tomar el Row seleccionado actualmente
y tomar la cell correspondiente al Id del elemento, y solo hacer un simple Remove de la lista,
este elemento podrias guardarlo en otra lista para despues enviar la lista y que te elimine todos
los elementos contenidos en el de la base de datos, y seria todo para la eliminacion de
registros....
Si tienes mas dudas puedes contactarme por el formulario de contacto.
Responder
Dan SB 3 de abril de 2016, 17:20
Amigo, buenas tardes! lei tu explicacion, segui tus pasos (Con datos distintos claro), y al compilar, al
momento que se van a imprimir los datos en el DataGrid me lanza el siguiente error:
"error referencia a objeto no establecida como instancia de un objeto"
Las lineas donde se detiene todo es el siguiente:
DataHelper.AutoGenerateColumns = False
DataHelper.DataSource = RegistrarArticulos()
ERROR >DataHelper.Columns("ColumnCodigo").DataPropertyName = "Codigo"***
DataHelper.Columns("ColumnProducto").DataPropertyName = "Producto"
DataHelper.Columns("ColumnModelo").DataPropertyName = "Modelo"
DataHelper.Columns("ColumnPrecio").DataPropertyName = "Precio"
DataHelper.Columns("ColumnCantidad").DataPropertyName = "Cantidad"
DataHelper.Columns("ColumnSubtotal").DataPropertyName = "Subtotal"
DataHelper.Columns("ColumnComentario").DataPropertyName ="Comentario"
¿Podrias decirme a que se debe esto y que debo hacer?
Responder
Respuestas
Dan SB 3 de abril de 2016, 20:09
Amigo ya pude resolver!, resulta ser que le habia puesto mal el nombre de la columna de mi
datagrid! Ahora tengo otro problemita... cuando le doy a imprimir informe me suelta que no he
elegido ningun origen de datos... Porq saldra eso?
José Luis García Bautista 4 de abril de 2016, 20:08
Hola Dan:
Recuerda que en el evento Load del formulario que contiene el reportviewer tienes que asignar
los objetos con datos.
Revisa esa parte seguramente ahí esta tu error.
Saludos
Dan SB 4 de abril de 2016, 21:28
Este comentario ha sido eliminado por el autor.
Dan SB 4 de abril de 2016, 21:54
Jose gracias por tu ayuda!! acabe de revisar donde me dijiste y tenias razón, escribi mal el
nombre del primer ReportDataSource al momento de añadirla a los otros DataSources.. Tu post
me sirvio demasiado!! me guie excelente, claro, añadiendo mis necesidades y que fuese
dinámico... Gracias!!!
José Luis García Bautista 4 de abril de 2016, 22:02
Excelente!!!
Saludos
Responder
Andrea Barzola 6 de abril de 2016, 19:20
Hola José Luis, me parece excelente el tutorial, he seguido paso a paso tu explicación con windows form,
pero cuando realizo los pasos en asp.net 4.0 al momento de elegir el Origen de Datos no me aparece la
opción Objeto, no quiero utilizar DataSet, me podrías ayudar en ello.
Gracias mil
Responder
Aurch 20 de abril de 2016, 5:43
Una pregunta Jose Luis. Yo tengo unas hojas de factura con el logo y demás y he realizado un informe
para que se adecúe cada elemento en el hueco correspondiente de la hoja. Tengo un elemento con el total
de la factura que va casi abajo pegado a la derecha de la hoja, pero dependiendo del número de items que
vayan en el detalle de la factura se me mueve. ¿Hay alguna posibilidad de fijar en una posición concreta
un campo de texto? Independientemente del resto del informe?
Un saludo y gracias.
Responder
Respuestas
Abraham Leon 1 de septiembre de 2016, 3:07
Encontraste la solución tengo el mismo problema que no encuentro una solución.
Responder
Santiago Corrao 29 de abril de 2016, 18:21
Excelente Tutorial!!
Responder
José Julián Arroyo Quintero 23 de mayo de 2016, 18:15
Muchas Gracias por sus aportes, un cordial saludo!
Responder
PEDRO FERNANDO OSTAIZA GARCIA 13 de junio de 2016, 11:07
como hago para controlar el boton imprimir...
Responder
Christian Martinez Laserna 28 de junio de 2016, 7:36
Me ha gustado mucho como lo has explicado, necesitaba un programa para hacer facturas, ya que el
anterior no me termina de convencer, a ver que tal me va con este
Responder
Christián Hevia 4 de julio de 2016, 16:10
Hola Jose Luis, soy Christián Hevia
estoy trabajando hace poco con SSRS, no es específicamente de facturación, son reportes idénticos que
tengo que sacar de Crystal Reports... Tienes algún tutorial de agrupaciones y subtotales. Si tienes algún
correo te puedo mostrar los problemas que he tenido y la información que hay en internet no me ha
servido de nada.
Que estés bien
Responder
JOSE JAVIER CACERES MAMANI 8 de julio de 2016, 11:23
Una consulta con respecto al ancho de la pagina que siempre tengo problemas, mencionas 21.59 y
descuentas 2 por el total de margenes, pienso que solo debes descontar uno para el ancho, puedes
aclararme mejor este tema.
Gracias por tu articulo
Responder
LUIS SANDOVAL RAMOS 22 de julio de 2016, 10:33
Amigo buenos dias me puedes enviar el ejemplo a mi correo lsandovalramos@hotmail.comn el enlace no
fucniona. mil gracias
Responder
Jean Pierre Alba 11 de agosto de 2016, 11:04
hola amigo me puedes enviar tu ejemplo a mi correo: jeanpier29.12@gmail.com
el enlace esta roto. gracias por enseñarnos. me es util esto
Responder
Abelardo 28 de agosto de 2016, 21:55
hola, muy aporte.
me podrás enviar el ejemplo en VB.net por favor al correo: abe_rodriguez@hotmail.com
muchas gracias.
Responder
Unknown 3 de septiembre de 2016, 13:07
José Luis, muy bueno tu Post la verdad es de muchísima utilidad, podrías enviarme el código a mi
correo?? marcelo_a_medina@hotmail.com o pasarme un nuevo link el de la página esta roto. Un Abrazo.
Responder
RUBY CHAC 6 de septiembre de 2016, 12:22
hola luis, queria felicitarte, como puedo generar el pdf mas de una vez
Responder
servermaster 14 de octubre de 2016, 16:50
me puedes pasar el link porfavor
Responder
Evelyn Anaya Garcia 21 de octubre de 2016, 12:31
Hola buenas tardes, sabes como agregar 10 tablas diferentes en un reporte ?
Responder
Raul Ernesto 1 de noviembre de 2016, 17:54
puedes compartir el link de descarga gumdam2017@gmail.com
Responder
Grover 8 de noviembre de 2016, 14:58
Podrias compartirme el link para descarga c#, te agradezco grovdex@hotmail.com
Responder
Grover 8 de noviembre de 2016, 14:58
Podrias compartirme el link para descarga c#, te agradezco grovdex@hotmail.com
Responder
Tobias tobi 3 de enero de 2017, 15:09
hola el enlace esta roto ya no existe para realizae la descarga. podrias compartir el enlace de descarga en
c# y VB a mi correo tobissf@gmail.com
te agradesco gracias..!!
Responder
Introduce tu comentario...
Comentar como: Seleccionar perfil...
Publicar
Vista previa
Deja un comentario si el articulo fue de utilidad.
Entrada más reciente Página principal Entrada antigua
Suscribirse a: Enviar comentarios (Atom)
Google+ Followers
Etiquetas
Agregar cadena de conexion en Visual Studio
Archivo de configuracion
Arquitectura 3 Capas .Net
Cadenas de conexion
Crear un archivo Excel desde WindowsForms
Crear un archivos excel desde C#
Crear un archivos excel desde VB.Net
Enviar imagen a ReportViewer
Enviar imagen de base de datos a Rdlc
FluentValidation
FluentValidation and WindowsForms
How to use FluentValidation in a WindowsForms Project
Imagen en Local report
Leer un archivos excel desde VB.Net o C#
Listas genericas y Rdlc
Parametros en un Local Report
Pasar datos de un DataGridView a otro
Pasar datos de un DataGridView a Textbox de forms diferentes
Pasar datos entre dos formularios
Programacion en 3 Capas
Programacion en capas C#
Programacion en capas.Net
Report viewer imagen CSharp
Report Viewer imagen Visual basic .Net
Reportes locales
Reportes locales en windows forms
SpreadSheetLigth
SpreadSheetLigth y WindowsForms
Uso de SQLCe
Plantilla Fantástico, S.A.. Con la tecnología de Blogger.