2009-04-24 110 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