2009-04-24 70 views
0

我有一个列表视图,我在代码隐藏中设置数据源 - 这工作正常。 当我向列表视图的itemtemplate添加另一个listview(或数据绑定控件),并在代码隐藏中为该控件设置数据源时,查询返回的字段似乎对嵌套列表视图不可用; 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(); 

编辑: 我已经添加下面的列表视图外的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的输出,只是有一个硬编码字符串,没有错误,并且硬编码字符串。OUPUTS的预期次数。这将表明它只是列名(j_Name)是错误的 - 即使我可以看到具有该确切列名的查询返回的数据集。

编辑:4 修正了它。 这是错误的 var qry2 = from q in context.Roles select q.j_Role; 这是正确的 var qry2 = from q in context.Roles select q;

回答

2

您需要内部列表绑定在外部列表的每一行中的​​的外部列表。

所以这个代码:

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(); 
    } 
} 

想必你会想要过滤值内列表基于来自外部列表当前项目的值

+0

谢谢,但你能稍微更具体吗? – user9659 2009-04-24 18:20:17