Solved

Bind DataGridView to ArrayList

Posted on 2008-10-17
9
4,541 Views
Last Modified: 2013-11-07
I am trying to do something simple here...

I have a class..

    Public Class queryAttribute
        Public ccDisplayName As String = ""
        Public ccQueryType As Integer
        Public ccQueryValue As String = ""
    End Class

Then there is an arraylist of this class

dim myList as ArrayList

I call myList.add for a number of items and I can verify they are there.

Then I try to set the datasource of the datagridview gvAttributes to be myList

so gvAttributes.Datasource = myList

When I initialize the app I do this..

With gvAttributes
                .AutoGenerateColumns = False
                .ColumnHeadersVisible = False
                .Columns.Add("Type", "Type")
                .Columns.Add("Value", "Value")
                Dim colBmp As New Bitmap(Application.StartupPath & "\resources\delete.gif")
                Dim colImg As Image
                colImg = colBmp

                Dim col As New DataGridViewImageColumn
                col.Image = colImg
                .Columns.Add(col)
            End With

Then when the content of the arraylist is changed I do this..

                With gvAttributes
                    '.AutoGenerateColumns = True
                    .ColumnHeadersVisible = True
                    .Columns(0).DataPropertyName = "ccDisplayName"
                    .Columns(1).DataPropertyName = "ccQueryValue"
                End With
                gvAttributes.DataSource = myList

Can someone please tell me why I dont have rows in my grid? I can see when I look at the properties of the grid in "watch" that the datasource has rows.. why are they not showing up here?

Please advise.
0
Comment
Question by:NTGuru705
  • 4
  • 4
9 Comments
 
LVL 1

Author Comment

by:NTGuru705
ID: 22745331
any thoughts to help a poor soul here?
0
 
LVL 13

Expert Comment

by:sm394
ID: 22745690
try
gvAttributes.Datasource = myList
gvAttributes.DataBind() ' if its missing
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 22746454
sm394,
DataBind() method is only for ASP.NET gridviews not for DataGridView
 
NTGuru705,
You are trying to bind the datagridview with the collection but you cannot do that way. Create a new datatable (instead of the class) and add the new datarows. Then you can bind easily.
0
 
LVL 1

Author Comment

by:NTGuru705
ID: 22746959
I am not sure I follow 100% could you elaborate on this please?
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 48

Accepted Solution

by:
jpaulino earned 500 total points
ID: 22747387
Small example
        Dim dt As New DataTable

        Dim rnd As New Random()
 

        dt.Columns.Add(New DataColumn("ID", GetType(Integer)))

        dt.Columns.Add(New DataColumn("Description", GetType(String)))

        dt.Columns.Add(New DataColumn("Value", GetType(Integer)))

 

        ' Here you add the values

        For x As Byte = 1 To 250

            Dim dr As DataRow = dt.NewRow()

            dr("ID") = x

            dr.Item("Description") = "Description " & x.ToString

            dr.Item("Value") = rnd.Next

            dt.Rows.Add(dr)

        Next

 

       ' Bind the information to the DataGridView1 

       ' (you don't need to create the columns before)

        Me.DataGridView1.DataSource = dt

Open in new window

0
 
LVL 1

Author Comment

by:NTGuru705
ID: 22750023
I suppose I am confused in why the arraylist doesnt work.. I understand your workaround.. (thank you for example) but I would like to understand why the arraylist binds but doesnt display... could you help me understand that one?

Thank you for your help.
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 22750034
Because you're not binding a regular arraylist but a structure. Datagridview doesn't guess that!
0
 
LVL 1

Author Comment

by:NTGuru705
ID: 22753206
so in what cases would binding an arraylist work? It seems the most effective way to use an array list is an array of a class.  What is a case that would work?  I am using an arraylist because it is being maintained by the UI and things are added/removed from the list.  So I just use the .remove to take the item out...

I suppose I could do just the same with a datatable but I am trying to understand the why behind it.. could you give me a scenario (other than a simple arraylist of strings) that would work?  Are there any scenarios where binding to a datagridview with an arraylist would work?

Thanks
0
 
LVL 48

Expert Comment

by:jpaulino
ID: 22813226
so in what cases would binding an arraylist work?
 
If you use a regular arraylist, just with values and not structures, it will work.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
In this video I am going to show you how to back up and restore Office 365 mailboxes using CodeTwo Backup for Office 365. Learn more about the tool used in this video here: http://www.codetwo.com/backup-for-office-365/ (http://www.codetwo.com/ba…
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…

912 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now