Question

J'ai un module de reporting dans une application ASP.NET WebForms (C #) qui utilise des contrôles dynamiques pour les paramètres de chaque rapport.

Ces contrôles dynamiques sont construits à partir d'une colonne XML dans un SQL Server 2008 DB.

structure XML:

<Report Parameters>
    <Parameter>
        <Name>CustomerId</Name>
        <Control />
    </Parameter>
     <Parameter>
        <Name>Start Date</Name>
        <Control>DDL</Control>
    </Parameter>
</Report Parameters>

Je l'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), puis un C # basé tranformation XSLT crée le contrôle approprié sur ma forme.

Si l'élément <Control> est vide (comme dans le cas du CustomerId) alors je veux utiliser une propriété existante c # avec le même nom (à savoir que j'ai un CustomerId défini dans mon code C #).

Ces valeurs de paramètres (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 l'élément sur Yank de <Name> de tout élément de <Control> qui est vide.

Le problème est que l'élément <Name> est sous la forme d'une chaîne et je veux vraiment que ce soit sous forme de code C # (désolé ne peut pas penser à une meilleure façon de décrire cela!), À savoir que je veux this.CustomerId ( a ajouté le ceci pour montrer le code ne est pas une chaîne) non « CustomerId ».

Comme je ne sais pas combien de rapports ce système aura au fil du temps, je ne veux pas vraiment de construire une déclaration ou d'un commutateur ENUM si « CustomerId » alors this.CustomerId etc. comme 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 cela pour des conseils ou des conseils sur une approche différente de ce problème serait la bienvenue.

Merci,

Rich.

Était-ce utile?

La solution

Ce que vous cherchez est un générateur de code. Bien que je ne l'ai pas mis en œuvre moi-même, je les modèles utilisés créés par d'autres avant et il fonctionne comme un charme. Vous pouvez commencer .

Autres conseils

Vous voulez générer dynamiquement une des propriétés de classe et il est basé sur le contenu XML? Et vous voulez sans avoir à générer du code et recompiler je suis sûr aussi. Je l'ai essayé une fois trop et je jamais réussi à le faire fonctionner.

Je ne vois pas de solution, désolé.

Cela devrait le faire:

this.GetType().GetProperty("CustomerId").SetValue("YourValue");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top