J'ai un module de rapport dans une application Web Forms ASP.NET (C#) qui utilise des contrôles dynamiques pour les paramètres de chaque rapport.Conversion d'une chaîne XML en code en C#
Ces contrôles dynamiques sont créés à partir d'une colonne XML dans une base de données SQL Server 2008.
structure XML:
<Report Parameters>
<Parameter>
<Name>CustomerId</Name>
<Control />
</Parameter>
<Parameter>
<Name>Start Date</Name>
<Control>DDL</Control>
</Parameter>
</Report Parameters>
J'ai laissé un grand nombre des éléments pour une meilleure lisibilité.
Si l'élément <Control>
n'est pas vide (comme dans le cas du paramètre Date de début dans l'exemple XML), une transformation XSLT basée sur C# crée le contrôle approprié sur mon formulaire. Si l'élément <Control>
est vide (comme dans le cas de CustomerId), je souhaite utiliser une propriété C# existante portant le même nom (par exemple, j'ai un CustomerId défini dans mon code C#). Ces valeurs de paramètre (CustomerId et Date de début) sont ensuite transmises à une procédure stockée utilisée pour générer les données du rapport. J'utilise XPathNavigator et les classes associées dans mon code C# pour extraire l'élément <Name>
de tout élément <Control>
vide.
Le problème est que l'élément <Name>
est sous la forme d'une chaîne et je veux vraiment qu'il soit sous forme de code C# (désolé ne peut pas penser à une meilleure façon de décrire cela!) Ie je veux this.CustomerId (ajouté ceci pour montrer que le code n'est pas une chaîne) et non "CustomerId". Comme je ne sais pas combien de rapports ce système aura au fil du temps je ne veux pas vraiment construire une instruction enum ou switch si "CustomerId" puis this.CustomerId etc. car il semble nier le point de code dynamique.
Je me rends compte que la réflexion sera probablement nécessaire et j'ai peu de connaissance de ceci donc tout conseil ou conseil sur une approche différente de ce problème serait le bienvenu.
Merci,
riches.
Je pense que ce n'est pas ce qu'il veut. Il veut le coder en dur, avec intellisense. – Jeroen