none
Como hacer un campo me permita usar campo en mutiples secciones en ReportViwer(.rdlc) MVC5 C#? RRS feed

  • Pregunta

  • Buenos dias soy nuevo en este foro queria saber si podria ayudar con un problema que tengo bueno tengo el reportviwer que lo llamo de esta manera en el controlador de historial 

       public ActionResult ReporteRegistros()
            {   // Arreglo para guardar las fechas seleccionadas en la vista     
                //  DateTime[] Fechas = {Convert.ToDateTime( DateTime.Now.Date.ToShortDateString()),Convert.ToDateTime( DateTime.Now.Date.ToShortDateString())};
                DateTime[] Fechas = { DateTime.Today, DateTime.Today };
    
                // Muestra la vista de Reporte
                return View(Fechas);
    
    
            }
            [HttpPost]
            public ActionResult ReporteRegistros(DateTime Fecha)
            {
                try
                {   // Si fecha no es nula, realiza la consulta
    
                    if (Fecha != null)
                    {
                        // Consulta de la BD de acuerdo a la fecha seleccionada
                        List<Order> orders = db.Orders.Where(x => x.Fecha == Fecha).ToList();
    
                        foreach (Order v in orders)
                        {   // Consulta el nombre del producto y del cliente
                            //v.Respuestas = db.Respuestas.Find(v.IdOrden).Resp;
                            v.Modelo = db.Modeloes.Find(v.IdModelo).Nombre;
    // aqui es donde hago la consulta del campo lo que quiero es que me pueda mostrar varias respuestas que tengo en el mismo
                            v.Respuesta = db.Respuestas.ToList().Find(x=>x.IdOrder==v.IdOrden).Resp;
    
                        }
    
                        // Configuramos el origen de datos del Informe (.rdlc)
                        ReportViewer RptEmpleados = new ReportViewer();      // Objeto de reportviewer
                        ReportDataSource rds = new ReportDataSource();  // Origen de datos
                        rds.Value = orders;     // Asigna la consulta de ventas como origen de datos
                        rds.Name = "DsPreguntasIPQC"; // Este nombre debe coincidir con el del Informe
                        RptEmpleados.LocalReport.DataSources.Add(rds); // Asignamos el origen de datos
                        RptEmpleados.LocalReport.ReportPath = Server.MapPath("~/Reportes/AE01T-A2234-001-01 Check List MT.rdlc");
                        ViewBag.ReportViewer = RptEmpleados; // Pasamos el objeto de reporte a la vista.
    
                    }
                }
                catch (Exception ex)
                {
                    ViewBag.Mensaje = ex.Message;
                }
                return View();
            }

    En la parte del reportviwer el rdlc la expresion que uso para poder hacer que me aparezca es esta "=IIf(Fields!IdPregunta.Value = 13 ,Fields!Respuesta.Value,Fields!IdPregunta.Value)"

    ya lo intente con diferentes condicinales y me sale #Error al momento ejecutar el reporte en la vista previa


    miércoles, 26 de junio de 2019 15:28

Todas las respuestas

  • La expresión en sí misma es correcta, suponiendo que los nombres de los campos estén bien escritos y coincidan con las columnas que pasas en "orders".

    Una posible causa del error es que la expresión esté escrita fuera del área de datos que tienes vinculada con el datasource "DsPreguntasIPQC" dentro del rdlc.

    miércoles, 26 de junio de 2019 15:41
    Moderador
  • bueno entonnces solo sera cuestion de generar un notmapped para cada o a eso te refieres ?
    jueves, 27 de junio de 2019 14:11
  • ¿A qué te refieres con lo de "notmapped"? No me suena que dentro del rdlc exista nada que se llame así.
    jueves, 27 de junio de 2019 14:34
    Moderador
  • bueno me refiera a que si tenia que hacer otra cosa dentro del codigo para poder dividir las repuestas perdon por no hacerme expicar

    como en esta parte la tengo que me lo busque asi no crees que me pueda afectar dentro del reporte.rdlc

    // aqui es donde hago la consulta del campo lo que quiero es que me pueda mostrar varias respuestas que tengo en el mismo
                            v.Respuesta = db.Respuestas.ToList().Find(x=>x.IdOrder==v.IdOrden).Resp;

    Ademas estoy haciendo un pivot para que me muestre mis repuestas de columas a filas para que se muestre mejor pero no se si es necesario porque si es el codigo no es necesario el cambio que estoy haciendo

    • Editado Megazx23 jueves, 27 de junio de 2019 15:04
    jueves, 27 de junio de 2019 15:01
  • No, nada de esto tiene nada que ver con el error que te sale.

    En tu código puedes hacer todo lo que quieras: Filtros, Pivot, etc. Da igual. Al final, el resultado de eso es una tabla, con filas y columnas. Eso es lo que le pasas al reporte, y es lo único que ve el reporte: filas y columnas. No sabe nada acerca de cómo has llegado a obtener esas filas y columnas.

    Los nombres y tipos de dichas columnas tienen que coincidir con los nombres y tipos de las columnas que definiste dentro del .rdlc para su origen de datos.

    Los nombres de campos de la expresión que usas dentro del informe tienen que coincidir con los nombres de campos que se han definido para ese origen de datos dentro del informe.

    Y la expresión tiene que estar definida dentro de un area de datos (lista, tabla, etc.) que esté vinculada con ese origen de datos.

    jueves, 27 de junio de 2019 18:43
    Moderador
  • entonces si los llamo como son porque en el  orgien de datos asi como lo llamode datos le puse como respuestas y ademas de eso no puedo comprender aun porque me los da asi

    viernes, 28 de junio de 2019 13:19
  • No entiendo nada. ¿Qué quiere decir eso de "le puse como respuestas"? Y "por qué me los da así" ¿Qué quiere decir "así"?

    Fíjate que te sale un error dentro del reporte. De cara a ese error lo único que importa es lo que hay dentro del reporte. No te fijes para nada (a estos efectos) en qué es lo que has hecho en tu código en C#. Solamente examina con el debugger la variable "orders" que le pasas cuando haces rds.Value = orders.

    Si hay alguna duda, ponnos aquí una captura de pantalla mostrando los valores que te enseña el debugger cuando preguntas por el valor de la variable en tiempo de ejecución. Las columnas que tengan los registros que hay ahí tienen que coincidir con las que use el informe. Si no están ahí, no hay ninguna manera de que el informe pueda "adivinarlas" o "absorberlas" desde tu progama.

    viernes, 28 de junio de 2019 14:46
    Moderador