我有一个listview,我在代码隐藏中设置数据源 - 这很好用。 当我将另一个listview(或数据绑定控件)添加到listview的itemtemplate,并在代码隐藏中为该控件设置数据源时,查询返回的字段似乎对嵌套列表视图不可用; ASP.NET抛出以下错误:DataBinding:'System.String'不包含名为'j_Name'的属性。
在下面的示例中,d_Description工作正常,而j_Role会抛出上面指出的错误。我可以看到查询返回的数据,我知道列名匹配,导致错误的原因是什么(以及如何解决)?
ASPX页面
<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>
代码背后
var qry1 = from q in context.Descriptions select q.d_Description;
LV1.DataSource = qualificationQry;
LV1.DataBind();
var qry2 = from q in context.Roles select q.j_Role;
LV2.DataSource = qualificationQry;
LV2.DataBind();
修改 我已经将类似于下面的代码添加到外部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 = from q in context.Roles select q.j_Role;
这是对的
var qry2 = from q in context.Roles select q;
答案 0 :(得分:2)
您需要在外部列表的ItemDataBoundEvent中将外部列表的每一行上的内部列表绑定。
所以这段代码:
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();
}
}
并且可能您希望根据外部列表的当前项中的值过滤内部列表的值