Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Loading a class from a string with a class name.

Posted on 2006-10-19
20
Medium Priority
?
246 Views
Last Modified: 2012-08-13
I don't no if this is easy to do?

I would like to make a function like

FillCombo(ddControl, CollectionClass, ValueField, TextField, NeedsNullValueRow)

this is the code that works:

            Dim BuyerCol As New Csb.EabOrder.EabOrderBuyerCollection
            BuyerCol.LoadAll()
            Dim buyer As Csb.EabOrder.EabOrderBuyer
           
            dropdown.Items.Clear()
            Dim FirstlistItem As New ListItem("", "")
            dropdown.Items.Add(FirstlistItem)
           
            For Each Buyer In BuyerCol
                Dim listItem As New ListItem(Buyer.BuyerName, Buyer.BuyerId)
                dropdown.Items.Add(listItem)
            Next

Thanks.
0
Comment
Question by:keezebees
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 11
  • 9
20 Comments
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17767647
I don't get what you want ?
0
 

Author Comment

by:keezebees
ID: 17771764
Sorry, should be al little more specific.

What i want is an function that automates the listed code
To do that I would have to be able to make an instance of the some classes just by there class name (string)
And thats what my problem is.

How do ik load the class 'Csb.EabOrder.EabOrderBuyer' as an instance based on only a class name??

public Function FillCombo(ddControl as dropdownlist, CollectionClassName as string, ValueField as string, TextField as string, NeedsNullValueRow as boolean) as boolean

Hope this is more clear.
0
 
LVL 7

Accepted Solution

by:
Mohamed Zedan earned 2000 total points
ID: 17773757
ok to create an instance just by classname is like this

        Dim asm As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly
        Dim instance As Object = asm.CreateInstance(CollectionClassName)

if the collection class implements Ienumerable you should be able to enumerate through its items

just like
              for each buyer in buyercol

will be replaced by

             dim Enumer as iEnumrator = ctype(instance,IEnumerable).getEnumerator
             while enumer.movenext
                 dim buyer as object = enumer.current
                 'Work with the buyer object
             end while

If you need more info please ask :) ...
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:keezebees
ID: 17775721
Thanks mohzedan.

Any Idea why i get an 'object reference not set to an instance of an object' error??

NullReference exception was unhandled by user code


Private Sub test()
            Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly
            Dim instance As Object = asm.CreateInstance("csb.EabOrder.EabOrderVerkoopOrderViewCollection")

'object reference error is here!!!!!            
Dim Enumer As IEnumerator = CType(instance, IEnumerable).GetEnumerator
            While Enumer.movenext
                Dim buyer As Object = Enumer.Current
                'Work with the buyer object
            End While

        End Sub
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17775770
try using eaborderverkooporderviewCollection
only in the createinstance...
and could you run this code
after dim asm .....

Dim types As Type() = asm.GetTypes
for i as integer = 0 to asm.length-1
  Console.writeline(asm(i).Name)
next

and the names of the types that are printed are the names you could load using this way.
i.e. asm.createinstance("name of type from the list printed")
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17775780
the exception is because the type name wasn't found in that assembly ... if it is contained in  a dll then that dll should be loaded ... if that type is in your namespace just check it's type name correctly ...
0
 

Author Comment

by:keezebees
ID: 17775940
ehh...

asm.length doesnt excists....

Must be getting to late for me:)
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17775970
sorry i meant types.length must be too late for me too . :)
0
 

Author Comment

by:keezebees
ID: 17776049
Like this right?

Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly
            Dim instance As Object = asm.CreateInstance("Csb.EabOrder.EabOrderVerkoopOrder")

            Dim types As Type() = asm.GetTypes
            For i As Integer = 0 To types.Length - 1
                MsgBox(types(i).Name)
            Next
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17776096
yes but instead of the msgbox use console.writeline(types(i).name)

that way you'll have them written in the output window
0
 

Author Comment

by:keezebees
ID: 17776194
Here is the output:

MyComputer
MyProject
ThreadSafeObjectProvider`1
desktopmodules_csb_eaborder_editcsb_eaborder_ascx
EditCsb_EabOrder
desktopmodules_csb_eaborder_viewcsb_eaborder_ascx
ViewCsb_EabOrder
desktopmodules_csb_eaborder_settings_ascx
Settings
FastObjectFactory_app_web_yu75jgso
MyComputer
MyProject
ThreadSafeObjectProvider`1
desktopmodules_csb_eaborder_editcsb_eaborder_ascx
EditCsb_EabOrder
desktopmodules_csb_eaborder_viewcsb_eaborder_ascx
ViewCsb_EabOrder
desktopmodules_csb_eaborder_settings_ascx
Settings
FastObjectFactory_app_web_yu75jgso
0
 

Author Comment

by:keezebees
ID: 17776256
Sorry  mohzedan,

Have to go now.
Will be back for another go tomorrow.

Thanks.
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17777921
see you tomorrow :)
0
 

Author Comment

by:keezebees
ID: 17844795
A bit late, but here are your points.
Just got it to work

Thanks.
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17844926
Sorry for being too late :)
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17844933
If you need any more info post here ok ... :)
0
 

Author Comment

by:keezebees
ID: 17844980
well,

what i did was just write my code the way i would normaly do.
Do the testing making sure that I dont need to come back no more.
And then i replaced my object declaration with:

Dim instance As Object = asm.CreateInstance(CollectionClassName)

intellisence obviusly wont work, but hey, who needs intellisence.........well actuali I do but dont tell anyone Ok?

can you tell me a bit more about  supporting Ienumerable in a class so i could do the enumerating?
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17845020
What is your collection class like ?
0
 

Author Comment

by:keezebees
ID: 17845373
I am using EntitySpaces for my DAL

You  know of that??
0
 
LVL 7

Expert Comment

by:Mohamed Zedan
ID: 17845483
I just read about it .... your collections should already implement Ienumerable
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…
Suggested Courses

721 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question