none
Convertir modelo con PIVOT RRS feed

  • Pregunta

  • Estimados, como están?

    Tengo el siguiente modelo de datos

    public class Transito
        {
            [Key]
            [Column(Order = 1)]
            public string SUCURSAL { get; set; }

            [Key]
            [Column(Order = 2)]
            [DataType(DataType.Date)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
            public DateTime FECHA { get; set; }

            [Key]
            [Column(Order = 3)]
            public TimeSpan HORA { get; set; }

            [DisplayName("Ingresos")]
            public int ENTRADAS { get; set; }

            public int SALIDAS { get; set; }
        }

    Necesito que al legar a la vista pero que la misma sea de la siguiente manera.

    FECHA - HORA - SUCURSAL1 - SUCURSAL2 - ECT...

    23/01/2017 - 09:00 - ENTRADAS - ENTRADAS - ENTRADAS ...

    23/01/2017 - 10:00 - ENTRADAS - ENTRADAS - ENTRADAS ...

    23/01/2017 - 11:00 - ENTRADAS - ENTRADAS - ENTRADAS ...

    23/01/2017 - 12:00 - ENTRADAS - ENTRADAS - ENTRADAS ...

    Hasta las 22 horas, lo que puede suceder es que tomen un solo día como también un rango de fechas por ejemplo un mes.

    Alguno tendrá una idea?


    Ezequiel Di Rosolini

    miércoles, 24 de enero de 2018 16:36

Todas las respuestas

  • para eso tendrias que crear en tiempo de ejecución tu tabla y luego enviarla como string a la vista y en la vista transformarla con un  @Html.Raw(ViewBag.Tabla), tendrias que usar tambien System.Reflection.PropertyInfo para recorrer cada propiedad del modelo


    Att. Franklin Andino

    miércoles, 24 de enero de 2018 16:49
  • para eso tendrias que crear en tiempo de ejecución tu tabla y luego enviarla como string a la vista y en la vista transformarla con un  @Html.Raw(ViewBag.Tabla), tendrias que usar tambien System.Reflection.PropertyInfo para recorrer cada propiedad del modelo


    Att. Franklin Andino

    Podrías ser algo más especifico de que debo escribir del lado de la vista.


    Ezequiel Di Rosolini

    miércoles, 24 de enero de 2018 17:24
  • en tu vista ya no tendrias una tabla como tal, sino @html.raw(viewbag.tabla)

    en el lado del controlador tendrais algo como esto

    StringBuilder sb = new StringBuilder();
                sb.Append("<table class='display compact dataTable no-footer' style='border-collapse: collapse' id='myTable'>");
                sb.Append("<thead>");
                sb.Append("<tr>");
                sb.Append("<td colspan='10' style='text-align:center; background-color:#C4D79B;border:0.5px solid black'><Label>DATOS SOLICITANTE</Label></td>");
                sb.Append("<td colspan='@TotalColumnasCompras' style='text-align:center; background-color:#538DD5; border:0.5px solid black'><Label>DATOS RESPONSABLE DE COMPRAS</Label></td>");
                sb.Append("</tr>");
                sb.Append("<tr>");
                int contador = 0, TotalProveedor = 0, TotalColumnasResponsable = 0, TotalColumnasCompras = 7;
                bool PrimerRow = true;
    
                foreach (var item in lista)
                {
                    if (PrimerRow)
                    {
                        TotalProveedor = item.Total;
                        foreach (System.Reflection.PropertyInfo a in item.GetType().GetProperties())
                        {
                            
                            if (!a.Name.Equals("Total") && !a.Name.Equals("Recomendado") && !a.Name.Equals("ProveedorRecomendado") && !a.Name.Equals("PrecioRecomendo") && !a.Name.Equals("ObservacionesCompras") && !a.Name.Equals("Comprar"))
                            {
                                TotalColumnasResponsable++;
                                string name = TypeDescriptor.GetProperties(typeof(PropiedadesComparacionCotizacion))[a.Name].DisplayName;
                                if (TotalColumnasResponsable <= 10)
                                    sb.Append("<th style='background-color:#C4D79B; border:0.5px solid black'>" + name + "</th>");
                                else
                                    sb.Append("<th style='background-color:#538DD5; border:0.5px solid black'>" + name + "</th>");
    
                            }
                        }
                        PrimerRow = false;
                        contador++;
                        continue;
                    }
    
                    if (contador < TotalProveedor)
                        foreach (System.Reflection.PropertyInfo a in item.GetType().GetProperties())
                        {
    
                            if (a.Name.Equals("NombreProveedor") || a.Name.Equals("PlazoEntrega") || a.Name.Equals("Costo") || a.Name.Equals("EstadoCotizacion") || a.Name.Equals("NombreCotizacion") || a.Name.Equals("VigenciaHasta"))
                            {
                                TotalColumnasCompras++;
                                string name = TypeDescriptor.GetProperties(typeof(PropiedadesComparacionCotizacion))[a.Name].DisplayName;
                                sb.Append("<th style='background-color:#538DD5;border:0.5px solid black'>" + name + "</th>");
                            }
                        }
    
                    contador++;
                }
                sb.Append("</tr>");
                sb.Append("</thead>");
                sb.Append("<tbody>");
                sb.Replace("@TotalColumnasCompras", TotalColumnasCompras.ToString());

    esto es solo para crear el encabezado


    Att. Franklin Andino

    miércoles, 24 de enero de 2018 17:30
  • hola

    podrias analizar si la extension de pivot de linq

    ¿Cómo implementar una pivot en LINQ?

    no resuelve lo que necesitas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 24 de enero de 2018 18:33
  • hola

    podrias analizar si la extension de pivot de linq

    ¿Cómo implementar una pivot en LINQ?

    no resuelve lo que necesitas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Leandro, acabo de ver el link pero cuando agrego .PIVOT me queda pide un using pero de donde los instalo?

    Ezequiel Di Rosolini

    miércoles, 24 de enero de 2018 18:42
  • >>me queda pide un using pero de donde los instalo?

    es una extension en el link

    pivot extension

    esta el codigo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 24 de enero de 2018 19:35