Reputation: 4816
I have a TreeView, which contains nodes. When a user clicks on a node, corresponding CrystalReport document should be created and displayed.
For example, names of my nodes are: "PeriodReport1", "PeriodReport2", "PeriodReport3". My CrystalReport documents are named same: "PeriodReport1", "PeriodReport2", "PeriodReport3".
How can I create and display right type of crystal reports document? I could do something like this:
select case reportName
case "PeriodReport1"
dim myReport as new PeriodReport1
case "PeriodReport2"
dim myReport as new PeriodReport2
...
end select
But probably there is a nicer way to do this. Can I use reflection to do this?
Upvotes: 2
Views: 1335
Reputation: 1397
What about casting? How do I cast a 'Object' instance? Something like
string myCustomClassName = getMyCustomClassName();
var myCustomInstance = (???????)myGenericObject; //What do I replace ?????? with?
Upvotes: 0
Reputation: 22493
You can also stash an object of any type in the tag
property of the TreeNode, which is often useful for this sort of thing. It's not very MVC, but can be a good fit if you're not already trying to keep models and views separate (which WinForms doesn't encourage you to do)
Upvotes: 2
Reputation: 37104
As long as the reports have a default paramaterless constructor, i.e. you can say new PeriodReport...
Activator.CreateInstance(Type.GetType("namespace.typename"))
Upvotes: 6
Reputation: 9617
Something like this:
Type t = Type.GetType("object type name");
TBaseObj new_obj = (TBaseObj) Activator.CreateInstance(t);
Upvotes: 2