none
Informe RDLC con varios dataset RRS feed

  • Pregunta

  • HOla estoy programando en asp.net c# con sql 2000.

    quiero hacer un informe con reportviewer con datos provenientes de varias querys. Para lo cual cree un dataset que contiene datatables para cada query.

    En el informe agregue una tabla para cada dataset.  y coloque este codigo:

    //TENGO ESTA MISMA FUNCION PARA CADA DATASET con su procedimiento almacenado correspondiente

     private DataTable getReport()
        {
            DataTable tabla = new DataTable();
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString);

            try
            {
                SqlCommand cmd = new SqlCommand("SP1", con);
                cmd.CommandType = CommandType.StoredProcedure;

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(tabla);

            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }
            finally
            {
                if (con != null)
                {
                    con.Close();
                }
            }
            return tabla;
        }

    protected void Page_Load(object sender, EventArgs e)
        {


            
            DataTable dt = getReport();
            DataTable dt2 = getReport2();
            DataTable dt3 = getReport3();
            DataTable dt4 = getReport4();
            DataTable dt5 = getReport5();

            ReportViewer1.LocalReport.ReportPath = "Reportes/Mireporte.rdlc";
            ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
            ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
            ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet2", dt2));
            ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet3", dt3));
            ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet4", dt4));
            ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet5", dt5));
            ReportViewer1.DataBind();
            ReportViewer1.Visible = true;
        }

    El codigo se ejecuta pero el informe no termina nunca de cargar, se queda pegado con el mensaje de "cargando".

    por favor ayuda, como lo puedo arreglar?

    viernes, 24 de julio de 2015 18:59

Respuestas

  • >>si sigo usando dataBind() se ejecuta pero no muestra todos los datos.

    es que el DataBind() es lo correcto

    que seria que no muestra todos los datos? quizas sea algo en al definicion del reporte o como mapeas los nombre de los datatable en el reporte

    recuerda que comente al agregar el datatable al dataset debe definirle un nombre que debe coincidir con el que usas en el reporte

    en realidad lo que aconsejaria es que crees un dataset tipado, un .xsd como origen del reporte y para tu codigo tambien

    un dataset sin tipo es una locura, si funciona es de pura casualidad

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 24 de julio de 2015 23:18

Todas las respuestas

  • Hola

    Debes colocar el código donde cargas el RDLC dentro de

    if (!IsPostBack) {
    //Aquí tu código }

    Quita la línea ReportViewer1.DataBind() por

    ReportViewer1.RefreshReport();

    viernes, 24 de julio de 2015 20:06
  • hola

    pero no deberias unir los datatable en un dataset y luego pasarlo al reporte

    DataTable dt = getReport();
    DataTable dt2 = getReport2();
    .
    .
    
    DataSet ds = new DataSet();
    ds.Tables.Add(dt);
    ds.Tables.Add(dt2);
    .
    .
    
    ReportViewer1.LocalReport.ReportPath = "Reportes/Mireporte.rdlc";
    ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", ds));

    Nota: quizas debas ponerle un nombre a los datatable

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 24 de julio de 2015 20:16
  • gracias, pero no reconoce el comando ReportViewer1.RefreshReport();

    si sigo usando dataBind() se ejecuta pero no muestra todos los datos.

    viernes, 24 de julio de 2015 20:42
  • disculpa error mío 

    ReportViewer1.LocalReport.Refresh();

    viernes, 24 de julio de 2015 20:47
  • >>si sigo usando dataBind() se ejecuta pero no muestra todos los datos.

    es que el DataBind() es lo correcto

    que seria que no muestra todos los datos? quizas sea algo en al definicion del reporte o como mapeas los nombre de los datatable en el reporte

    recuerda que comente al agregar el datatable al dataset debe definirle un nombre que debe coincidir con el que usas en el reporte

    en realidad lo que aconsejaria es que crees un dataset tipado, un .xsd como origen del reporte y para tu codigo tambien

    un dataset sin tipo es una locura, si funciona es de pura casualidad

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 24 de julio de 2015 23:18