2011-04-01 89 views
9

如果我有以下ASP.NET代码(它没有完成 - 显然还有很多缺失,但没有它的问题):如何将GridView绑定到自定义对象?

<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> 

如果我有代码隐藏是这样的:

Private MyListOfObjects As List(Of MyObject) 

... 

Public Class MyObject 

    Public MyTextBoxString as String 
    Public MyLabelString as String 

End Class 

如何绑定GridView,使其中一行等于我的MyListOfObjects列表中的一个项目,以便数据将在页面加载或回发中填充并保留?我从来没有像以前那样完成自定义数据绑定,所以完整的解释会非常有帮助。到目前为止,我所遇到的所有教程都只是谈论直​​接使用GridViews与数据库查询结果,而这不是我所需要的。

谢谢!

+0

检查是否有帮助:http://weblogs.asp.net/gurusarkar/archive/2010/04/28/binding-list-of-custom-class-to-gridview-or-listview-control.aspx – gbs 2011-04-01 21:19:40

+0

看到我对你的问题的回答。 – JonH 2011-04-01 23:03:53

回答

8

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

MyGridView.DataSource = myList 
MyGridView.DataBind() 

这里有一个非常相似职位:

Binding a method that returns List<employee> to a gridview

看起来像您使用的是vb.net的列表。记住列表可以包含整数,字符串,日期,对象(这些包括用户定义的类型(您的对象))。 因此,您可以通过将datasource属性设置为列表来将gridview绑定到列表对象。

在上面的示例中,myList可能包含大量员工对象等。因此,将其分配给数据源和.DataBind(),并将每个包含对象的行分配给一个gridview。

+0

除了预先定义好我的列,并且我的列表与列不匹配,所以我需要手动指定行并将其映射到列表中的对象。 – qJake 2011-04-01 20:01:02

+0

@SpikeX - 您不需要做任何事情,无论您在网格视图中显示的哪个列都会显示出来。例如,假设您有一个包含3个属性年龄,姓名和出生日期的客户对象。如果您只想显示名称和年龄,那么您的.aspx标记中就有2个具有名称和年龄的模板字段。我的解决方案为您处理。 – JonH 2011-04-01 23:03:33

+0

你的答案是最接近的,但是你没有描述如何将个别'TemplateFields'绑定到对象的属性 - 你需要使用'<%#Databinder.Eval(Container.DataSource,“MyPropertyName”)%>' – qJake 2011-04-05 19:46:01

1

你可以做这样的事情

My Label: <asp:Label id="myLabel" runat="server" Text='<%# Eval("MyTextBoxString") %>' /> 
在标记和类似的东西,你的文本框

GridView1.DataSource = MyListOfObjects 
GridView1.DataBind() 
+0

我不明白吗? – ppumkin 2012-07-26 09:14:10

1

首先记住任何绑定控件像GridViewDropdownList e.t.c结合到公共属性,所以首先让你的公众成员的公共属性。

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

最后,你可以通过保存它SessionViewState回发后保持它坚持这个列表对象。

我希望你现在就可以做到!如果需要,你可以要求更多的帮助。

相关问题