我在ASP.NET webforms应用程序(C#)中有一个报告模块,它使用动态控件来处理每个报告的参数。
这些动态控件是从SQL Server 2008 DB中的XML列构建的。
XML结构:
<Report Parameters>
<Parameter>
<Name>CustomerId</Name>
<Control />
</Parameter>
<Parameter>
<Name>Start Date</Name>
<Control>DDL</Control>
</Parameter>
</Report Parameters>
为了便于阅读,我遗漏了很多元素。
如果<Control>
元素不为空(如XML示例中的Start Date参数的情况),则基于C#的XSLT转换会在我的表单上创建适当的控件。
如果<Control>
元素为空(如CustomerId的情况),那么我想使用具有相同名称的现有c#属性(即我在我的c#代码中定义了CustomerId)。
然后将这些参数值(CustomerId和Start Date)传递给用于生成报告数据的存储过程。
我在我的C#代码中使用XPathNavigator和相关类来抽取任何空<Name>
元素的<Control>
元素。
问题是<Name>
元素是字符串的形式,我真的希望它是C#代码形式(抱歉想不出更好的方式来描述它!)即我想要this.CustomerId(添加了这个以显示它的代码而不是字符串)而不是“CustomerId”。
由于我不知道这个系统会随着时间推移有多少报告,所以我真的不想建立一个enum或switch语句,如果“CustomerId”那么.CustomerId等因为它似乎否定了动态代码。
我意识到可能需要反思,而我对此知之甚少,因此欢迎任何有关此问题的不同方法的建议或建议。
谢谢,
富
答案 0 :(得分:0)
您想根据xml内容动态生成一个类及其属性吗? 你想要它而不必生成代码并重新编译我也很确定。 我曾经尝试过这一次,但我从未设法让它发挥作用。
我没有看到任何解决方案,抱歉。
答案 1 :(得分:0)
您正在寻找的是代码生成器。虽然我自己没有实现过,但我之前使用过其他人创建的模板,它就像魅力一样。您可以开始使用here。
答案 2 :(得分:0)
这应该这样做:
this.GetType().GetProperty("CustomerId").SetValue("YourValue");