Pregunta

La situación es que necesito crear una tabla en la vista de cuadrícula con este aspecto:

---------- | ID --- | --- Nombre-- | --1 / 2002-- | --2 / 2002-- | --1 / 2003-- | ........ | 2/2009 |
Cust1--

Cust2--

:
:
Tengo dos tablas en db: Clientes y pedidos, a través de LINQ to SQL DataContext
ID y nombre de los clientes que obtengo de una consulta simple

var custInfo = from cust in db.Customers
               select new { ID = cust.Id, 
                            FullName = cust.FirstName + " " + cust.LastName } 


dataGridOrdersPreview.DataSource = custInfo;

Y necesito alguna pista, cómo generar esas columnas en formato t / año donde t indica la primera o la segunda mitad del año, y asignar a esas columnas generadas los pedidos de cada Cliente en esa sesión del año (mostrando solo costes)

[editar]

Hasta ahora, estoy intentando algo como esto:

var orders = from ord in db.Orders
             group ord by ord.Id_cust into grouped
             let costs = grouped
               .Where( s => s.YearSession == session && s.Year == year)
               .Select(a => new { Costs = a.Cost ) } )

             select new { ID = grouped.Key,
                          Name = custInfo
                             .Where( a => a.ID == grouped.Key)
                             .Select( j => j.Name).Single(),   
                          Cost = ExtensionLibrary.Sum(costs, "\n")
                      };

(en Costo, obteniendo solo los costos sumados en la sesión de ese año para cada cliente)

y luego pienso en iterar a través de los años y las sesiones y obtener de alguna manera los resultados de la consulta a las columnas correspondientes

while (year <= DateTime.Today.Year)
        {
            year++;
            while (session < 2)
            {
                session++;
                dataGridOrdersPreview.Columns.Add(session +"/"+ year);
                col.Add((session +"/"+ year), 
                         orders.Select( a => a.Cost ).ToList() );
                /* col is Dictionary<string, List<string> > */

            }
            session = 0;
        }

Aquí he generado las columnas que quiero y tengo órdenes en el Diccionario donde Clave es el nombre de la columna y el Valor son órdenes en esa columna, pero necesito ayuda para vincularlas a esas columnas

¿Fue útil?

Solución

La forma en que lo he visto hacer es crear una clase que tenga las propiedades que deseas, por ejemplo,

class CustOrders
{
   public string CustName {get; set;}
   public int Orders2002-1 {get; set;}
   public int Orders2002-2 {get; set;}
   ...
   public int Orders2009-1 {get; set;}
}

Luego use System.Windows.Forms.BindingSource, llámelo CustOrdsBindingSource y configure su DataSource a una lista de su nueva clase.

List<CustOrders> myListOfCustOrders =  new List<CustOrders>();
/* Code to populate myListOfCustOrders */
CustOrdsBindingSource.DataSource = myListOfCustOrders;

En este caso, tendrá que escribir el código para convertir cada resultado de los resultados de su consulta en una instancia de CustOrders y almacenarlo en myListOfCustOrders.

Finalmente, el origen de datos de la vista de cuadrícula también deberá configurarse:

gridView1.DataSource = CustOrdsBindingSource;

El gran problema que veo con este enfoque es que tendrá que cambiar la clase de CustOrders cada año, a menos que haya algún vudú que algunos puedan sugerir para insertar propiedades en la clase en tiempo de ejecución.

De cualquier manera, espero que esto te dé un comienzo.

Otros consejos

Mientras no se actualicen / agreguen / eliminen filas, creo que solo generaría esa cuadrícula manualmente.

Obtenga la lista de clientes y el número de ventas en qué año / sesión. Y luego, en el formulario, tome esa lista y cree las columnas necesarias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top