Solved

Loading a class from a string with a class name.

Posted on 2006-10-19
20
241 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
  • 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 500 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
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

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: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone 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

Suggested Solutions

It’s quite interesting for me as I worked with Excel using vb.net for some time. Here are some topics which I know want to share with others whom this might help. First of all if you are working with Excel then you need to Download the Following …
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

856 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