[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2894
  • Last Modified:

VB .NET: Binding custom IList to GridView

When I started playing with this earlier today it looked like such a simple thing. Except I still can't get it to work. There's a lot of information around about doing this, I seem to find the bits which are either in C# or I just hear a whooshing sound as things go over my head (the latter being preceded by a glazed expression).

Ah well... hopefully I'm just missing something or my syntax is wrong.

I have an IList defined like this:

Public ListOfStuff As New List(Of BitsOfStuff)

BitsOfStuff is a Structure defined like this:

Public Structure BitsOfStuff
        Dim GreenStuff As String
        Dim BlueStuff As String
End Structure

In my sample code there are two members in BitsOfStuff. I can evaluate and display them if I use traditional looping type statements.

I was vaguely (very vaguely) under the impression I could bind that IList to a GridView control with:

SomeGridView.DataSource = ListOfStuff
SomeGridView.DataBind()

It doesn't complain at me, but I can't get it to display anything.

So far I've tried:

<asp:BoundField DataField="GreenStuff" HeaderText="Green Stuff" />

But it tells me GreenStuff doesn't exist.

I've also tried (and completely failed) to use a number of different statements within a TemplateField.

<asp:TemplateField HeaderText="Blue Stuff">
    <ItemTemplate>
        <%# DataBinder.Eval(BitsOfStuff, "DataItem.BlueStuff") %>
    </ItemTemplate>
</asp:TemplateField>

Is it something really simple? Or am I just doing it completely wrong?

Thank you in advance.

Chris
0
Chris Dent
Asked:
Chris Dent
  • 2
  • 2
1 Solution
 
NazoUKCommented:
In order to be bindable to something like a gridview, an object must implement the Ienumerable interface.

Probably the easiest way to do this would be by using an objectdatasource control which will automatically wrap your object as an Ienumerable if it doesn't natively support it. I had a play about and got a gridview to display your structure correctly. See code snippet for what I did.
BitsOfStuff.vb:
 
Imports Microsoft.VisualBasic
Imports System.Collections.Generic
 
Public Structure BitsOfStuff
    Private _GreenStuff As String
    Private _BlueStuff As String
 
    Public Property GreenStuff()
        Get
            Return _GreenStuff
        End Get
        Set(ByVal value)
            _GreenStuff = value
        End Set
    End Property
 
    Public Property BlueStuff()
        Get
            Return _GreenStuff
        End Get
        Set(ByVal value)
            _GreenStuff = value
        End Set
    End Property
 
    Public Function getStuff() As List(Of BitsOfStuff)
        Dim ListOfStuff As New List(Of BitsOfStuff)
        For i As Integer = 1 To 10
            Dim Bit As New BitsOfStuff
            Bit.BlueStuff = "Blue" & i
            Bit.GreenStuff = "Green" & i
            ListOfStuff.Add(Bit)
        Next
        Return ListOfStuff
    End Function
End Structure
 
default.aspx:
 
<asp:GridView runat="server" ID="SomeGridView" DataSourceID="ods" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField DataField="GreenStuff" />
        </Columns>
        </asp:GridView>
        <asp:ObjectDataSource runat="server" ID="ods" TypeName="BitsOfStuff" SelectMethod="getStuff" />
       

Open in new window

0
 
NazoUKCommented:
Whoops, my apologies, ignore all that, lists do implement IEnumerable. I think the problem is that the values must be implemented as properties rather than just public variables.

I created a list of the structure in the code snippet above and assigned it as the gridview's datasource and it worked fine. When I changed the properties back to be public variables it didn't work.
0
 
Chris DentPowerShell DeveloperAuthor Commented:

Ahh that's a good start to the day. It works perfectly now, thank you very much :-D

Chris
0
 
Chris DentPowerShell DeveloperAuthor Commented:
Exactly what I needed :) Thank you.

Chris
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now