将对象列表绑定到Datagrid.Net WebForms时出现问题

本文关键字:WebForms 问题 Net Datagrid 对象 列表 绑定 | 更新日期: 2023-09-27 18:28:28

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

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

然后我有一个返回FooList的Dao对象,我想将该列表绑定到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" 

这里有什么问题?

将对象列表绑定到Datagrid.Net WebForms时出现问题

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;}
  }
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"/>

应该有效。。