El post que buscas se encuentra eliminado, pero este también te puede interesar

Filtrar Datos de Reporte - Crystal Report (.Net)

Primeramente les deseo feliz año 2013 a todos los lectores de mis post espero que este año este lleno de muchas bendiciones para todos.

Quiero empezar este año con un ejemplo que es muy común y necesario a la hora de hacer reportes con crystal report, y es que cuando creamos reportes en ocasiones tenemos la necesidad de filtrar los datos por medio de uno o varios campos.

El ejemplo sera uno simple para que puedan entenderlo, la base de datos que usare para el ejemplo solo cuenta con 2 tablas Categoría y Articulo.

Filtrar Datos de Reporte - Crystal Report (.Net)


Creamos un dataset(DsReporte) y agregamos 2 datatable que representaran las 2 tablas de la base de datos ademas le agregamos los campos correspondiente de cada tabla y también indicamos el tipo de dato de cada campo. Importante que cada datatable tiene que llamarse como el nombre de la tabla en la base de datos y ademas tener los mismos campos y mismo tipo de dato que tienen en la base de datos.

Programacion

c#

Creamos el reporte usando el dataset que creamos(el reporte mostrara todos los articulos de nuestra base de datos).

.net

Ahora crearemos el código que usaremos para llenar el dataset y mostrar los datos en el reporte así que agregamos una clase(modulo en el caso de vb) llamada Datos y agregamos el siguiente codigo.


public static DataTable CargarCategoria()
{
    using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
    {
        DataTable dt = new DataTable();
        string query = "SELECT * FROM Categoria";
        SqlCommand cmd = new SqlCommand(query, cnn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        return dt;
    }
}
 
public static DsReporte CargarArticulos()
{
    DsReporte ds = new DsReporte();
    using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
    {
        string query = "SELECT * FROM Articulo";
        SqlCommand cmd = new SqlCommand(query, cnn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds, "Articulo");
        return ds;
    }
}
 
public static DsReporte FiltrarArticulos(int categoria)
{
    DsReporte ds = new DsReporte();
    using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
    {
        string query = "SELECT * FROM Articulo WHERE CatId=@cat";
        SqlCommand cmd = new SqlCommand(query, cnn);
        cmd.Parameters.AddWithValue("@cat", categoria);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds, "Articulo");
        return ds;
    }
}


Public Function CargarCategoria() As DataTable
    Using cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
        Dim dt As New DataTable()
        Dim query As String = "SELECT * FROM Categoria"
        Dim cmd As New SqlCommand(query, cnn)
        Dim da As New SqlDataAdapter(cmd)
        da.Fill(dt)
        Return dt
    End Using
End Function
 
Public Function CargarArticulos() As DsReporte
    Dim ds As New DsReporte()
    Using cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
        Dim query As String = "SELECT * FROM Articulo"
        Dim cmd As New SqlCommand(query, cnn)
        Dim da As New SqlDataAdapter(cmd)
        da.Fill(ds, "Articulo")
        Return ds
    End Using
 
End Function
 
Public Function FiltrarArticulos(ByVal categoria As Integer) As DsReporte
    Dim ds As New DsReporte()
    Using cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
        Dim query As String = "SELECT * FROM Articulo WHERE CatId=@cat"
        Dim cmd As New SqlCommand(query, cnn)
        cmd.Parameters.AddWithValue("@cat", categoria)
        Dim da As New SqlDataAdapter(cmd)
        da.Fill(ds, "Articulo")
        Return ds
    End Using
End Function

El metodo CargarCategoria() obtiene todos los datos de la tabla categoría en un datatable.
El metodo CargarArticulos() llena el dataset con los datos de la tabla articulos.
El metodo FiltrarArticulos() también llena el dataset con los datos de la tabla artículos pero a diferencia del anterior este los llena aplicando un filtro que en este caso es por medio del campo CatId.

Ahora programaremos el código que tendrá nuestro Form.

private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DataSource = Datos.CargarCategoria();
    comboBox1.DisplayMember = "CatNombre";
    comboBox1.ValueMember = "CatId";
    comboBox1.SelectedIndex = -1;
 
    DsReporte datos = Datos.CargarArticulos();
 
    CrpReporte report = new CrpReporte();
    report.SetDataSource(datos);
    crystalReportViewer1.ReportSource = report;
 
}
 
private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
    DsReporte datos = Datos.FiltrarArticulos(Convert.ToInt32(comboBox1.SelectedValue));
 
    CrpReporte report = new CrpReporte();
    report.SetDataSource(datos);
    crystalReportViewer1.ReportSource = report;
}


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ComboBox1.DataSource = Datos.CargarCategoria()
    ComboBox1.DisplayMember = "CatNombre"
    ComboBox1.ValueMember = "CatId"
    ComboBox1.SelectedIndex = -1
 
    Dim da As DsReporte = Datos.CargarArticulos()
 
    Dim report As New CrpReporte()
    report.SetDataSource(da)
    CrystalReportViewer1.ReportSource = report
End Sub
 
Private Sub ComboBox1_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted
    Dim da As DsReporte = Datos.FiltrarArticulos(Convert.ToInt32(ComboBox1.SelectedValue))
 
    Dim report As New CrpReporte()
    report.SetDataSource(da)
    CrystalReportViewer1.ReportSource = report
End Sub

En el evento Load cargamos las categorias en un combobox y tambien cargamos en el reporte todos los artículos.
En el evento SelectionChangeCommitted del combobox cargamos los datos en el reporte dependiendo la categoría seleccionada en el combobox, asi cada vez que el usuario seleccione una categoría del combobox los datos del reporte solo mostraran los artículos que pertenecen a la categoría seleccionada.

Reportes


Eso es todo espero les sirva mucho, si quieren descargar los ejemplos pueden hacerlo desde mi blog.
http://cristiantorresalfaro.blogspot.com/2013/01/filtrar-datos-de-reporte-crystal-report.html

Crystal Report

Fuentes de Información - Filtrar Datos de Reporte - Crystal Report (.Net)

El contenido del post es de mi autoría, y/o, es un recopilación de distintas fuentes.

Dar puntos
27 Puntos
Votos: 4 - T!score: 7/10
  • 0 Seguidores
  • 6.912 Visitas
  • 5 Favoritos

4 comentarios - Filtrar Datos de Reporte - Crystal Report (.Net)

@esmerlin0 Hace más de 1 año +1
tengo una duda no tengo el crystal report en visual studio express editon, como lo instalo
@krizztorres Hace más de 1 año
Con la versión express del VS no puedes usar crystal report no se pueden crear reportes es una de las limitaciones de la version express.

Saludos.
@10405571375a Hace más de 1 año
gracias
@ElZ0rr0_0 Hace más de 1 año
donde bajo crystal report en visual studio?
@psy_tikon Hace más de 5 meses
Fine!