Binding a DataGrid to an arraylist of strings
...or any simple value type for that matter.
A friend of mine asked me this question and of course it sounds simple. All he wanted to do was:
<asp:Datagrid id="grid" runat="server">
<Columns>
<asp:BoundColumn DataField="..."/>
</Columns>
</asp:Datagrid>
The question was what to put as the DataField, since he's binding an arraylist of strings, as in:
ArrayList list = new ArrayList();
list.Add("1");
list.Add("2");
list.Add("3");
grid.DataSource = list;
grid.DataBind();
What indeed? There's no property on the string data type that returns the string. Doing a little google searching didn't turn up anything satisfactory. One idea was to wrap up the array list into a hashtable (where you can use Key/Value), or to make a custom class and bind that. Yuck, thats a hack! It isn't reusable at all -- and most importantly, it might be a designer messing with the aspx (or ascx) page, and they can't and shouldn't have to write code to accomplish the task. Here's what I would consider the "right" way, which requires zero code changes:
<asp:Datagrid id="grid" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<%# Container.DataItem %>
</ItemTemplate>
<asp:TemplateColumn>
</Columns>
</asp:Datagrid>
1 Comments:
The syntax supported in calls to 'Eval' just supports basically dot notation and indexers to get at properties. It would be nice if just a "." meant "the object itself". If it did, then DataField="." would have worked here.
Post a Comment
<< Home