我正在使用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"
这里有什么问题?
答案 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"/>
应该工作..