none
No se ha proporcionado ninguna instancia de origen de datos para el origen de datos 'DataSet1'. RRS feed

  • Pregunta

  • Hola tengo un informe de al cual le he agregado un dataset para en el cual creé una tabla que quiero que muestre el reporte, pero me muestra el error del titulo. Aqui dejo mi codigo

    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ToString()))
    {
    con.Open();
    SqlCommand cmd = new SqlCommand("SELECT * from tabla where cod_user='"+Session["cod_user"]+"'", con);
    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
      {
        DataSet DsRF = new DataSet();//DsRF es el dataset que creè agregando un nuevo elemente, ese dataset lo agregue al informe como origen de datos.
    
        DataTable t = new DataTable();
        t.TableName = "dt_RF";//dt_RF es la datatable que agregue en el dataset DsRF
        da.Fill(DsRF, "dt_RF");
    
    ReportDataSource datasource = new
    ReportDataSource("dt_RF", DsRF.Tables[0]);
    
                      ctl00.LocalReport.DataSources.Add(datasource);
    ctl00.LocalReport.ReportPath = Server.MapPath("~/Proyecto/Report1.rdlc");
    ctl00.LocalReport.Refresh();
    }
    }

    jueves, 29 de marzo de 2018 16:53

Respuestas

  • Te falta meter el data table t dentro del dataset DsRF: DsRf.Tables.Add(t).

    Pero en realidad es superfluo meter la tabla dentro del dataset para luego sacarla del dataset y pasársela al informe. Si en realidad no vas a usar el dataset para nada, pásale directamente la tabla al informe:

    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ToString()))
    {
        SqlCommand cmd = new SqlCommand("SELECT * from tabla where cod_user='"+Session["cod_user"]+"'", con);
        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            DataTable t = new DataTable();
            da.Fill(t);
            ReportDataSource datasource = new ReportDataSource("dt_RF", t);
            ctl00.LocalReport.DataSources.Add(datasource);
            ctl00.LocalReport.ReportPath = Server.MapPath("~/Proyecto/Report1.rdlc");
            ctl00.LocalReport.Refresh();
        }
    }

    Te he quitado también el con.Open, que no se necesita cuando usas un dataadapter (el método Fill ya abre y cierra la conexión internamente).

    Asegúrate de que "dt_RF" es verdaderamente el nombre interno del DataSet dentro de la definición del informe. El nombre interno no tiene por qué ser el mismo que el nombre del DataSet que usaste en tiempo de diseño dentro del proyecto de Visual Studio. Por cierto, no te confundas por la palabra "DataSet": lo que dentro de un informe se llama "Dataset", en realidad es equivalente a lo que sería un DataTable en C# (no un DataSet de C#).

    viernes, 30 de marzo de 2018 12:02

Todas las respuestas

  • Te falta meter el data table t dentro del dataset DsRF: DsRf.Tables.Add(t).

    Pero en realidad es superfluo meter la tabla dentro del dataset para luego sacarla del dataset y pasársela al informe. Si en realidad no vas a usar el dataset para nada, pásale directamente la tabla al informe:

    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ToString()))
    {
        SqlCommand cmd = new SqlCommand("SELECT * from tabla where cod_user='"+Session["cod_user"]+"'", con);
        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            DataTable t = new DataTable();
            da.Fill(t);
            ReportDataSource datasource = new ReportDataSource("dt_RF", t);
            ctl00.LocalReport.DataSources.Add(datasource);
            ctl00.LocalReport.ReportPath = Server.MapPath("~/Proyecto/Report1.rdlc");
            ctl00.LocalReport.Refresh();
        }
    }

    Te he quitado también el con.Open, que no se necesita cuando usas un dataadapter (el método Fill ya abre y cierra la conexión internamente).

    Asegúrate de que "dt_RF" es verdaderamente el nombre interno del DataSet dentro de la definición del informe. El nombre interno no tiene por qué ser el mismo que el nombre del DataSet que usaste en tiempo de diseño dentro del proyecto de Visual Studio. Por cierto, no te confundas por la palabra "DataSet": lo que dentro de un informe se llama "Dataset", en realidad es equivalente a lo que sería un DataTable en C# (no un DataSet de C#).

    viernes, 30 de marzo de 2018 12:02
  • hola gracias por responder, ya lo he puesto como usted, pero sucede que ahora me muestra el reportviewer en blanco :c
    domingo, 1 de abril de 2018 3:08
  • hola gracias por responder, ya lo he puesto como usted, pero sucede que ahora me muestra el reportviewer en blanco :c

    Eso indicaría que no se han cargado datos. Sigue la ejecución con el debugger, y páralo en la línea donde se hace la carga de t, y examina el contenido, a ver qué tiene. Si está vacío, revisa el valor que te ha llegado en Session["cod_user"], y valida en la base de datos que realmente existan registros para ese código. Pero todo eso compruébalo con el debugger; no presumas que ha tenido que llegar forzosamente un determinado valor, verifica con el depurador que el valor esperado realmente ha sido recibido en ese punto del código.
    domingo, 1 de abril de 2018 12:48
  • Hola la consulta si tiene datos, ya la probe en SQL, eso es lo mas raro, y solo se queda asi trabado:
    lunes, 2 de abril de 2018 14:29
  • Hola la consulta si tiene datos, ya la probe en SQL,
    ¡NO! Probarla en SQL no vale. Por eso te insistí muchísimo en que tenías que probarla con el debugger. En el caso de que sea el parámetro el que te está llegando mal, con el debugger lo detectarías, pero con SQL no lo detectas.
    lunes, 2 de abril de 2018 19:58
  • Hola ya lo pude solucionar poniendo tu codigo asi:

     protected void Page_Load(object sender, EventArgs e)
    {
    if (!Page.IsPostBack)
    {
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ToString()))
    {
    //demas codigo
    }
    }
    }
    

    Me ayudaste mucho. Gracias

    martes, 3 de abril de 2018 1:07