无法将对象列表绑定到Datagrid .Net WebForms

时间:2012-03-20 16:06:47

标签: c# .net webforms

我正在使用C#和WebForms并遇到问题。我有一个这样的课:

 public class Foo
 {
      public int _touchID;
      public string _touchName;
  }

然后我有一个Dao对象返回List Foo,我想将该列表绑定到DataGrid

public List<Foo> getFooList()
    { //get my list and whatnot}

我将它绑定到asp:DataGrid,就像这样:

TouchGrid.DataSource = dao.getFooList();
TouchGrid.DataBind();

aspx页面是这样的:

 <asp:DataGrid ID="TouchGrid" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundColumn HeaderText="ID" DataField="_touchID"></asp:BoundColumn>
        <asp:TemplateColumn HeaderText="Touch">
            <ItemTemplate>
                  <asp:Label ID="touchName" text='<%#DataBinder.Eval(Container.DataItem, "_touchname") %>' runat="server"/>
                  <%--<div class="touchDescriptionHidden"><%#DataBinder.Eval(Container.DataItem, "_description")%></div>--%>
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

当我运行代码时,我得到一个运行时异常,因为

  

在找不到名称为“_touchID”的字段或属性   选定的数据来源。

我尝试过使用DataItem._touchID,但是我使用了同样的错误。我还尝试自动生成列,看看我是否能得到一些提示,说明为什么会失败,但我收到一条消息说

  

无法自动生成所选数据源的列

我知道我错过了什么,但我不确定究竟是什么。如果我在DataBind行调试并查看DataSource,我可以看到我的对象就好了:

  

TouchGrid.DataSource

 [0] - _touchID=1 | _name="stuff"  
 [1] - _touchID=2 | _name="otherStuff" 

这里有什么问题?

2 个答案:

答案 0 :(得分:2)

DataBinding机制不适用于类字段,但使用类属性。

所以你需要将字段转换为属性(这也是一个请求的OOP原则)。

public class Foo
 {
      public int _touchID;
      public string _touchName;
  }

becomes

public class Foo
 {
      public int TouchID {get; set;}
      public string TouchName {get; set;}
  }

答案 1 :(得分:1)

public class Foo
{
  public int TouchID {get; set;}
  public string TouchName {get; set;}
}

同时更改数据绑定如下

<asp:Label ID="touchName" 
text='<%# DataBinder.Eval(Container, "DataItem.TouchName") %>' runat="server"/>

应该工作..