Pergunta

A situação é que eu preciso criar a tabela em visualização de grade, parecendo assim:

---------- | Id --- | --- nome-- |--1/2002-- | --2/2002-- |--1/2003-- | ........ | 2/2009 |
Cust1-- |
Cust2-- |
:
:
Eu tenho duas tabelas em db - clientes e pedidos, através do LINQ para SQL DataContext
Id e nome dos clientes que estou recebendo de uma consulta simples

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


dataGridOrdersPreview.DataSource = custInfo;

E eu preciso de alguma pista, como gerar essas colunas no formato t/ano em que t indica o primeiro ou o segundo semestre do ano e atribui a que as colunas geraram os pedidos de cada cliente naquela sessão do ano (exibindo apenas custos)

editar

No que diz respeito a agora, estou tentando algo assim:

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")
                      };

(no custo, obtendo apenas os custos resumidos naquele ano para cada cliente)

E então eu penso em iterar através dos anos e sessões e obter de alguma forma os resultados da consulta para as colunas correspondentes

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;
        }

Aqui eu gerei colunas que eu quero e tenho ordens no dicionário em que a chave é o nome e o valor da coluna são ordens nessa coluna, mas preciso de ajuda para vinculá -lo a essas colunas

Foi útil?

Solução

A maneira como eu vi isso é criar uma classe que tenha as propriedades que você deseja, por exemplo,

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;}
}

Em seguida, use o system.windows.forms.bindingsource, ligue para o CustordsBindingSource e defina seu conjunto de dados para uma lista da sua nova classe.

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

Nesse caso, você precisará escrever o código para converter cada resultado de seus resultados de consulta em uma instância de customs e armazená -lo em mylistofcustorders.

Finalmente, a fonte de dados da Grid View também deverá ser definida:

gridView1.DataSource = CustOrdsBindingSource;

O grande problema que vejo com essa abordagem é que você terá que alterar a classe Custorders todos os anos, a menos que haja algum vodu que alguns possam sugerir para inserir propriedades na aula no tempo de execução.

De qualquer maneira, espero que isso lhe dê um começo.

Outras dicas

Enquanto não houver atualização/adição/exclusão de linhas, acho que apenas geraria essa grade manualmente.

Busque a lista de clientes e a contagem de quantas vendas em que ano/sessão. E então, no formulário, pegue essa lista e crie as colunas necessárias.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top