Array
(
)

Macro substituição como no Visual Foxpro... Reflection?

Wso Software
   - 07 ago 2011

Boa tarde a todos,

Além de programar em C# também trabalho a bastante tempo com Visual Foxpro. Um recurso muito utilizado é a chamada MACRO SUBSTITUIÇÃO. Tenho que preencher determinados campos de uma lista para apresentar em um relatório e esse recurso seria de extrema utilidade.

O problema é o seguinte (resumido):

1. Tenho uma tabela no DB com os tamanhos de um produto... cada linha é um tamanho com sua quantidade, por exemplo:

ID   TAM    QTDE

1     34      10
2     36        9
3     38      15
...
N     46        1 

Como podem ver posso ter vários tamanhos... e nem todos os produtos terão as mesmas quantidades de tamanhos na tabela.

No relatório... os campos serão apresentados inline:

ID   PRODUTO   TAM1  TAM2  TAM3.... TAM_N
1    PROD01       10         9                 15
2    PROD02                    1         4 

Ou seja... terei vários campos onde preciso preencher as quantidades nas respectivas colunas.

Bem, em Visual Foxpro eu faria isso da seguinte maneira, tendo que os campos da tabela começem com o prefixo "QTDE" + a posição da grade: '01', '02', '03'... 'N':

 

LOCAL comando = ""

FOR i = 1 TO QuantidadeTamanhosGrade

** o comando fica assim: 'QTDE10 = 42' por exemplo
comando = "QTDE" + i + " = " + lista[i].quantidade
&comando

ENDFOR

 


Ou seja, eu consigo concatenar  uma string e 'executar' ela... assim os comandos ficam muito reduzidos.

Agora eu gostaria de fazer algo parecido no C#... a minha estrutura de código é mais ou menos isso:

 

    foreach (retornoSelectModelos item in lista)
    {
      // Preenche a grade do modelo
      var grade = (from g in ctx.PedidoModelosGrade
          where g.idPedidoModelos == item.idPedidoModelos
          orderby g.tamanho
          select g).ToList();

      foreach (var tamanho in grade)
      {
      // AQUI EU TERIA QUE USAR O RECURSO DA MACRO!!!
      // o objeto ITEM possui campos grade01 até gradeX
      // o objeto tamanho possui campos tamanho01 até gradeX
      // Preciso preencher apenas os correspondentes (mesmo numero no caso)

      // Mais ou menos assim:
      string comando = "item.grade" + tamanho.tamanho + " = tamanho.quantidade" + tamanho.tamanho;

      // Arqui rodaria todo o conteúdo de comando
      &comando

      }
    }

 


Suspeito que deva usar Reflection... mas não tenho idéia de como fazer...

Alguém poderia me ajudar?