如何将GridView绑定到自定义对象?

9
如果我有以下ASP.NET代码(它不完整 - 显然有很多缺失,但都不重要):
    <asp:GridView>
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    My Label: <asp:Label />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    My Text Box: <asp:TextBox />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

如果我在CodeBehind中有以下代码:

Private MyListOfObjects As List(Of MyObject)

...

Public Class MyObject

    Public MyTextBoxString as String
    Public MyLabelString as String

End Class

我该如何绑定GridView,以便一行等于我的MyListOfObjects列表中的一个项目,并且数据将在页面加载或postbacks期间填充和保留?我以前从未进行过这样的自定义数据绑定,因此完整的说明会非常有帮助。到目前为止,我遇到的所有教程都只涉及直接使用数据库查询结果的GridView,而这不是我所需要的。
谢谢!

请检查此链接是否有帮助:http://weblogs.asp.net/gurusarkar/archive/2010/04/28/binding-list-of-custom-class-to-gridview-or-listview-control.aspx - gbs
请看我的回答。 - JonH
3个回答

8

只需将GridView的数据源设置为您的对象即可。

MyGridView.DataSource = myList
MyGridView.DataBind()

这里有一个非常相似的帖子:

将返回List<employee>的方法绑定到GridView

看起来你正在使用vb.net中的列表。请记住,列表可以保存整数、字符串、日期、对象(包括用户定义的类型(你的对象))等。因此,您可以通过将数据源属性设置为您的列表来将GridView绑定到列表对象。

在上面的示例中,myList可能保存了大量的员工对象等。所以将其分配给数据源并.DataBind(),然后就会出现一个GridView,每一行都包含您的对象。


除非我预先定义了我的列,而我的列表与列不匹配,因此我需要手动指定和映射行到列表内的对象。 - qJake
@SpikeX - 你不需要做任何事情,无论你从网格视图中使用了哪些<TemplateField>列,都会被显示出来。例如,假设你有一个客户对象,它有3个属性:年龄、姓名和出生日期。如果你只想显示姓名和年龄,那么在你的.aspx标记中,有2个模板字段分别为姓名和年龄。我的解决方案会为你处理这个问题。 - JonH
你的答案最接近,但是你没有描述如何将单个“TemplateFields”绑定到对象的属性 - 你需要使用<%# Databinder.Eval(Container.DataSource, "MyPropertyName") %> - qJake
Darren Pope comments "@SpikeX - 如果你正在使用BoundField对象,那么你不需要使用DataBinder.Eval。你只需要将DataField属性设置为相应的属性即可。而且,我认为这样更简洁。只需一行代码,而不是5+行(如果正确缩进的话)" - Rup

1
你可以这样做:
 My Label: <asp:Label id="myLabel" runat="server" Text='<%# Eval("MyTextBoxString") %>'  />

在标记中以及类似的东西中为您的文本框进行编程。

GridView1.DataSource = MyListOfObjects
GridView1.DataBind()

1

首先要记住任何绑定控件,如GridViewDropdownList等都绑定到公共属性,因此首先将您的公共成员变为公共属性。

然后创建MyObject类的对象,并将它们添加到您的List<MyObject>对象中。

最后,您可以通过将其保存在SessionViewState中来保留此列表对象以在回发后维护它。

我希望现在你能做到了!如果需要更多帮助,可以随时问我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接