【发布时间】:2011-01-26 22:51:34
【问题描述】:
这是我遇到过的最奇怪的错误,因为它没有任何意义。我从我的控制器那里得到一个 IList。我什至可以编写一个 foreach 循环并将 TicketId 附加到 stringbuilder 并显示我的结果。
我可以设置断点并看到我返回了预期的结果....正如预期的那样!所有值都到位(没有拼写错误,因为我什至复制和粘贴)
但如果我尝试将其绑定到 GridView 或中继器,我会收到错误消息:ID 为“gv”的 GridView 的数据源没有任何属性或属性可用于生成列
示例 - 在此代码中如果我将 DataBinding 注释掉到 gridview gv - 我得到的结果与 TicketId 的一样:
LeadController controller = new LeadController();
var leads = controller.SearchProducts(DateTime.Now.AddDays(-50),
DateTime.Now, string.Empty, string.Empty);
var sb = new StringBuilder();
foreach (LeadDto lead in (leads))
{
sb.Append(string.Format("{0} -----", lead.TicketId));
}
lblTop.Text = sb.ToString();
gv.DataSource = leads;
gv.DataBind();
但是如果 DataBinding 没有被注释 - 整个页面都会出现上述错误。 这是我的 ascx
<asp:TextBox ID="lblTop" runat="server" /><asp:GridView ID="gv" runat="server" AutoGenerateColumns="true" ></asp:GridView>
如果我这样改变我的网格视图:
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false" >
<Columns>
<asp:TemplateField >
<ItemTemplate>
<%# Eval("TicketId") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
我收到一条错误消息:DataBinding:“DataTransferObjects.LeadDto”不包含名为“TicketId”的属性。
但我可以在设置 DataSource 之后和 DataBinding 之前看到它...
我已经尝试关闭 VS2008 甚至重新启动我的电脑,以防万一它是一个神奇的童话错误......
请问有什么建议吗?
【问题讨论】:
-
没有看到您的 LeadController 类,我很难确定问题所在。将绑定代码更改为 gv.DataSource =leads.AsEnumerable() 有什么作用?
标签: asp.net data-binding gridview