Loading a class from a string with a class name.

keezebees
keezebees used Ask the Experts™
on
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.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Mohamed ZedanSenior IT Analyst

Commented:
I don't get what you want ?

Author

Commented:
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.
Senior IT Analyst
Commented:
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 :) ...
Become a Microsoft Certified Solutions Expert

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

Author

Commented:
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
Mohamed ZedanSenior IT Analyst

Commented:
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")
Mohamed ZedanSenior IT Analyst

Commented:
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 ...

Author

Commented:
ehh...

asm.length doesnt excists....

Must be getting to late for me:)
Mohamed ZedanSenior IT Analyst

Commented:
sorry i meant types.length must be too late for me too . :)

Author

Commented:
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
Mohamed ZedanSenior IT Analyst

Commented:
yes but instead of the msgbox use console.writeline(types(i).name)

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

Author

Commented:
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

Author

Commented:
Sorry  mohzedan,

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

Thanks.
Mohamed ZedanSenior IT Analyst

Commented:
see you tomorrow :)

Author

Commented:
A bit late, but here are your points.
Just got it to work

Thanks.
Mohamed ZedanSenior IT Analyst

Commented:
Sorry for being too late :)
Mohamed ZedanSenior IT Analyst

Commented:
If you need any more info post here ok ... :)

Author

Commented:
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?
Mohamed ZedanSenior IT Analyst

Commented:
What is your collection class like ?

Author

Commented:
I am using EntitySpaces for my DAL

You  know of that??
Mohamed ZedanSenior IT Analyst

Commented:
I just read about it .... your collections should already implement Ienumerable

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial