将列表数据绑定到GridView。 GridView找不到我的属性!

时间:2011-04-13 19:57:20

标签: c# data-binding gridview ienumerable

假设:

我有一个班级:

class MyObject
{
  public string Field1;
  public string Field2;
}

和以下代码:

var list = SomeFunction(); // returns a valid List<MyObject>
gvMyList.DataSource = list;
gvMyList.DataBind(); // THIS THROWS AN EXCEPTION

aspx页面中的GridView控件:

<asp:GridView ID="gvMyList" AutoGenerateColumns="false" runat="server">
  <Columns>
    <asp:TemplateField HeaderText="Field 1">
      <ItemTemplate>
        <asp:Label ID="lblCourse" runat="server" Text='<%# Eval("Field1") + " " + Eval("Field2") %>'></asp:Label>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

问题:

所以我知道如果某些东西实现了IEnumerable,那么它就可以传递给DataSource属性。据我所知,如果您传递DataSource一个列表,那么我应该可以使用MyObjectEval("Field1")访问Eval("Field2")的属性。这不是这里的情况。相反,我得到一个异常抛出:

DataBinding: 'MyObject' does not contain a property with the name 'Field1'.

1 个答案:

答案 0 :(得分:7)

您的课程包含字段,而非属性;您必须以这种方式定义属性:

 class MyObject
    {
      public string Field1 { get; set; }
      public string Field2 { get; set; }
    }