2010-06-29 2 views
2

У меня есть модуль отчетности в приложении ASP.NET для веб-форм (C#), который использует динамические элементы управления для параметров для каждого отчета.Преобразование строки XML в код в C#

Эти динамические элементы управления построены из столбца XML в базе данных SQL Server 2008.

XML структура:

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

Я оставил для себя много элементов для удобства чтения.

Если элемент <Control> не пуст (как в случае параметра Дата начала в примере XML), то преобразование XSLT на основе C# создает соответствующий элемент управления в моей форме.

Если элемент <Control> пуст (как в случае с CustomerId), то я хочу использовать существующее свойство C# с тем же именем (т. Е. У меня есть CustomerId, определенный в моем коде C#).

Эти значения параметров (CustomerId и Дата начала) затем передаются в хранимую процедуру, используемую для генерации данных отчета.

Я использую XPathNavigator и связанные классы в моем коде C#, чтобы вытащить элемент <Name> любого элемента <Control>, который пуст.

Проблема заключается в том, что элемент <Name> находится в виде строки, и я действительно хочу, чтобы она была в форме кода на C# (извините, не могу придумать лучший способ описать это!), Т.е. я хочу this.CustomerId (добавлено это, чтобы показать, что это код не строка), а не «CustomerId».

Как я не знаю, сколько отчетов эта система будет иметь со временем Я не хочу, чтобы создать enum или оператор switch, если «CustomerId» then this.CustomerId и т. Д., Поскольку он, кажется, отрицает точку динамического кода.

Я понимаю, что размышления, вероятно, понадобятся, и я мало знаю об этом, поэтому любые советы или советы по другому подходу к этой проблеме приветствуются.

Thanks,

Rich.

ответ

0

Что вы ищете - это генератор кода. Хотя я сам не реализовал его, я использовал шаблоны, созданные другими людьми раньше, и он работает как шарм. Вы можете начать работу here.

0

Вы хотите динамически генерировать класс и его свойства на основе содержимого xml? И вы хотите его без необходимости генерировать код и перекомпилировать, я тоже уверен. Я тоже пробовал это один раз, и мне никогда не удавалось заставить его работать.

Я не вижу никакого решения, извините.

0

Это следует сделать это:

this.GetType().GetProperty("CustomerId").SetValue("YourValue"); 
+0

Я думаю, что это не то, что он хочет. Он хочет, чтобы это было жестко, с intellisense. – Jeroen