Asp.net 嵌套listview数据绑定-未找到属性?
我有一个listview,在那里我在代码隐藏中设置了数据源——这很好用。 当我向listview的itemtemplate添加另一个listview(或数据绑定控件)并在codebehind中为该控件设置数据源时,查询返回的字段似乎对嵌套的listview不可用;ASP.NET引发以下错误:数据绑定:“System.String”不包含名为“j_name”的属性 在下面的示例中,d_描述工作正常,而j_角色抛出上述错误。我可以看到查询返回的数据,并且我知道列名匹配,那么是什么导致了错误(以及如何解决它) ASPX页Asp.net 嵌套listview数据绑定-未找到属性?,asp.net,linq-to-sql,data-binding,listview,Asp.net,Linq To Sql,Data Binding,Listview,我有一个listview,在那里我在代码隐藏中设置了数据源——这很好用。 当我向listview的itemtemplate添加另一个listview(或数据绑定控件)并在codebehind中为该控件设置数据源时,查询返回的字段似乎对嵌套的listview不可用;ASP.NET引发以下错误:数据绑定:“System.String”不包含名为“j_name”的属性 在下面的示例中,d_描述工作正常,而j_角色抛出上述错误。我可以看到查询返回的数据,并且我知道列名匹配,那么是什么导致了错误(以及如何
<asp:ListView ID="LV1" runat="server">
<LayoutTemplate>
<table runat="server" id="tblSummary">
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<%#Eval("d_Description")%>
</td>
</tr>
<tr>
<td>
<asp:ListView ID="LV2" runat="server">
<ItemTemplate>
<%#Eval("j_Role")%>
</ItemTemplate>
<LayoutTemplate>
<asp:placeholder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
</asp:ListView>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
编辑:
我在外部listview的ItemDataBound事件中添加了类似于下面的代码,但仍然遇到相同的错误。想必我误解了指示
protected void LV_ItemDataBound(object sender, ListViewItemEventArgs e)
{
using (dbDataContext context = new dbDataContext()
{
var qry2 = from q in context.Roles select q.j_Role;
ListView tempLV = (ListView)e.Item.FindControl("LV2");
tempLV.DataSource = qry2;
tempLV.DataBind();
}
}
编辑:2
在网上阅读了更多的内容后(现在我已经知道要搜索什么了),建议的答案似乎是正确的——但是,它不起作用——有人能提出原因吗
编辑:3
如果我放弃了j_Name的输出,只使用了一个硬编码字符串,则不会出现错误,并且硬编码字符串输出了预期的次数。这将表明错误的只是列名(j_name)——即使我可以看到从查询返回的数据集具有确切的列名
编辑:4
修好了。
这是错误的
var qry2=来自上下文中的q。角色选择q.j_角色代码>
这是正确的
var qry2=来自上下文中的q。角色选择q代码>您需要为外部列表绑定中外部列表每一行的内部列表
所以这个代码:
var qry2 = from q in context.Roles select q.j_Role;
LV2.DataSource = qualificationQry;
LV2.DataBind();
对于外部列表ItemDataBound事件,需要使用偶数处理程序:
protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
// Bind the inner list on every repeat of the outer list
var qry2 = from q in context.Roles select q.j_Role;
LV2.DataSource = qualificationQry;
LV2.DataBind();
}
}
您可能希望根据外部列表当前项的值筛选内部列表的值谢谢,但是你能稍微具体一点吗?编辑得更具体一点-那里也有一个指向msdn docs for ItemDataBound的链接,如果你需要更多信息请参阅我对原始问题的编辑-我已经完成了你的建议,我仍然遇到相同的错误(我可以看到正在调用的事件,以及从DB返回的数据,尽管如此,我仍然得到system.string属性错误)。很好,很高兴您修复了该错误-很抱歉,我不知怎么错过了您的最后一条评论,无论如何,至少它现在可以工作了:)
protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
// Bind the inner list on every repeat of the outer list
var qry2 = from q in context.Roles select q.j_Role;
LV2.DataSource = qualificationQry;
LV2.DataBind();
}
}