The good news: when you're bound to an ArrayList, it works like you're bound to anything else -- you can set the TableStyle's MappingName to the type name ("ArrayList"), and all the public properties of the type are available as columns.
The bad news: string isn't special cased: string has one public property, and it's Length. If you don't set up TableStyles or ColumnStyles, that's what's available. ColumnStyles and TableStyles let you hide properties that you'd normally see, but don't let you add new properties.
There are a couple easy workarounds here. One is to create a DataTable that holds your items instead of an ArrayList. The other is to create a class that holds your strings and exposes them as a public property:
Public Class StringWrapper
Private MyValue As String
Sub New(ByVal s As String)
MyValue = s
End Sub
Public ReadOnly Property Value() As String
Get
Return MyValue
End Get
End Property
End Class
-Scott