我有一个包含节点的TreeView。当用户单击某个节点时,应创建并显示相应的CrystalReport文档。
例如,我的节点名称是:“PeriodReport1”,“PeriodReport2”,“PeriodReport3”。我的CrystalReport文档命名相同:“PeriodReport1”,“PeriodReport2”,“PeriodReport3”。
如何创建和显示正确类型的水晶报告文档?我可以这样做:
select case reportName
case "PeriodReport1"
dim myReport as new PeriodReport1
case "PeriodReport2"
dim myReport as new PeriodReport2
...
end select
但可能有更好的方法来做到这一点。我可以使用反射来做到这一点吗?
答案 0 :(得分:6)
只要报告有默认的无参数构造函数,即你可以说新的PeriodReport ......
Activator.CreateInstance(Type.GetType("namespace.typename"))
答案 1 :(得分:2)
这样的事情:
Type t = Type.GetType("object type name");
TBaseObj new_obj = (TBaseObj) Activator.CreateInstance(t);
答案 2 :(得分:2)
您还可以在TreeNode的tag
属性中存储任何类型的对象,这对于此类事情通常很有用。它不是非常MVC,但如果您还没有尝试将模型和视图分开(WinForms不鼓励您这样做),那么它可能非常合适。
答案 3 :(得分:0)
铸造怎么样?如何投射“对象”实例?像
这样的东西string myCustomClassName = getMyCustomClassName();
var myCustomInstance = (???????)myGenericObject; //What do I replace ?????? with?