将对象列表绑定到Datagrid.Net WebForms时出现问题
本文关键字:WebForms 问题 Net Datagrid 对象 列表 绑定 | 更新日期: 2023-09-27 18:28:28
我正在使用C#和WebForms,遇到了一个问题。我有一门课是这样的:
public class Foo
{
public int _touchID;
public string _touchName;
}
然后我有一个返回Foo
的List
的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"
这里有什么问题?
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"/>
应该有效。。