Asp.net 嵌套listview数据绑定-未找到属性?

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_角色抛出上述错误。我可以看到查询返回的数据,并且我知道列名匹配,那么是什么导致了错误(以及如何

我有一个listview,在那里我在代码隐藏中设置了数据源——这很好用。 当我向listview的itemtemplate添加另一个listview(或数据绑定控件)并在codebehind中为该控件设置数据源时,查询返回的字段似乎对嵌套的listview不可用;ASP.NET引发以下错误:数据绑定:“System.String”不包含名为“j_name”的属性

在下面的示例中,d_描述工作正常,而j_角色抛出上述错误。我可以看到查询返回的数据,并且我知道列名匹配,那么是什么导致了错误(以及如何解决它)

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>
编辑: 我在外部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();
  }
}