C# e o problema dos Grids

Bom, eu não sou exatamente um expert em C#, mas uso no dia-a-dia no trabalho, e ultimamente uma coisa vem me incomodando bastante na sua definição.

Primeiro, vamos deixar claro, uso .net v2.0. Ou seja, não sei se o problema foi corrigido nas versões posteriores, mas pelo que vi, não o foi.

Quando criamos um DataGrid em C#, para exibirmos dados no DataGrid precisamos especificar um DataGridTableStyle, que é o define que tipo de dado será exibido naquele DataGrid, qual será o nome de cada coluna, a ordem das colunas, etc.
Pois bem, temos então algo nesse estilo:

DataGridTableStyle estilo = new DataGridTableStyle();

estilo.MappingName = typeof(List).Name;

DataGridTextBoxColumn coluna = new DataGridTextBoxColumn();
coluna.MappingName = “Campo”;
coluna.HeaderText = “Meu Campo”;
estilo.GridColumnStyles.Add(coluna);

dataGrid1.TableStyles.Clear();
dataGrid1.TableStyles.Add(estilo);

Agora olhe bem pra esse código. Você a vê a linha que define coluna.MappingName? Pois é. Ele define uma string com o nome do campo. Sim, uma string hard-coded no seu código.
“Ah, mas qual o mal nisso?”, você pode perguntar. Como é sabido, o Visual Studio tem uma ferramenta de refactor razoavelmente eficiente. Que deixa que você modifique o nome de um campo para melhorar o seu código em poucos passos. No entanto, com o nome no campo assim numa string, isso passa a não ser mais tão útil assim, pois você tem que ir lendo todas as ocorrências da string para ver se elas são mesmas relativas ao campo que você está modificando. Se você esquecer de alguma, você terá problemas no seu programa.
Um outra caso é que em refactors algumas vezes você muda a estrutura do seu programa e aí você não pode ter certeza se o campo que você quer apagar realmente não é referenciado pois não é possível encontrá-lo sem que você busque pela string e vá vendo ponto-a-ponto.

Não é o pior problema do universo, no entanto, vai de encontro a toda facilidade de refactor estabelecida no Visual Studio.

Eu procurei e não encontrei solução para isso, e fiquei bem decepcionado. Tive que usar de truques pra encontrar essas coisas no código, como declarar uma variável temporária do mesmo tipo da Classe usada na Lista para poder usar o refactor.

Vocês conhecem uma solução melhor?

Leave a Reply

Your email address will not be published. Required fields are marked *