Macro substituição como no Visual Foxpro... Reflection?
07/08/2011
0
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 QTDE1 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?
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?
Wso Software
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)