2

我在 ASP.NET 网络表单应用程序 (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 和开始日期)传递给用于生成报告数据的存储过程。

我在我的 C# 代码中使用 XPathNavigator 和关联的类来抽出<Name>任何<Control>空元素的元素。

问题是该<Name>元素是字符串的形式,我真的希望它是 C# 代码形式(抱歉想不出更好的方式来描述这个!)即我想要 this.CustomerId(将 this 添加到显示它的代码不是字符串)而不是“CustomerId”。

由于我不知道随着时间的推移这个系统会有多少报告,我真的不想建立一个枚举或 switch 语句 if "CustomerId" 然后 this.CustomerId 等,因为它似乎否定了动态代码的意义。

我意识到可能需要进行反思,但我对此知之甚少,因此欢迎任何有关解决此问题的不同方法的建议或建议。

谢谢,

富有的。

4

3 回答 3

0

您想根据 xml 内容动态生成一个类及其属性吗?你想要它而不必生成代码和重新编译我也敢肯定。我也尝试过一次,但我从未设法让它工作。

我没有看到任何解决方案,对不起。

于 2010-06-29T14:51:31.973 回答
0

您正在寻找的是代码生成器。虽然我自己还没有实现,但我使用过其他人创建的模板,它就像一个魅力。您可以从这里开始。

于 2010-06-29T15:01:40.523 回答
0

这应该这样做:

this.GetType().GetProperty("CustomerId").SetValue("YourValue");
于 2010-06-30T03:41:39.530 回答