2014-03-07 137 views
0

我有一個ASP.NET GridView,其中值綁定到其中一列的ID。在GridView中嵌套ListView

此表的另一個列應包含項目列表,應通過從GridView傳入ID來解決這些項目列表。

爲了實現這一點,我試圖嵌套的ListView GridView的內部,並且使ID到由ListView中使用的一個ObjectDataSource的默認參數,但該語法是不允許的:

<asp:TemplateField HeaderText="columnItems"> 
     <ItemTemplate> 
      <asp:ListView ID="listOfItems" runat="server" DataSourceID="MyObjectDataSource > 
       <ItemTemplate> 
        <asp:LinkButton ID="MyLinkButton" Runat="Server" Text='item'></asp:LinkButton> 
       </ItemTemplate> 
      </asp:ListView> 
      <asp:ObjectDataSource ID="MyObjectDataSource" runat="server" 
       TypeName="MyTypeName.Whatever" SelectMethod="GetItems"> 
       <SelectParameters> 
        <asp:Parameter Name="requestId" Type="String" DefaultValue='<%# Eval("ID")'/> 
       </SelectParameters> 
      </asp:ObjectDataSource> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 

那麼,如何去傳遞的ID,所以我可以將L項目是?

回答

0

附上「OnRowDataBound」事件到GridView控件檢索項對於GridView上每行的ListView(在GridView綁定之後):

eg在ASPX頁面:

<asp:GridView id="MyGridView" OnRowDataBound="GetItems" ... > ... </asp:GridView> 

在後臺代碼:

protected void GetItems(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType != DataControlRowType.DataRow) 
    { 
     return; 
    } 

    // Get the ID from the GridView 
    var dataRowView = (DataRowView) e.Row.DataItem; 
    var id = dataRowView["ID"].ToString(); 

    // Bind the supporting documents to the ListView control 
    var listView = (ListView) e.Row.FindControl("listOfItems"); 
    listView.DataSource = /* Call to database to return a DataSet of items */; 
    listView.DataBind(); 
} 

(如將是適當的,我試過編輯蒂尼西亞諾的職位對他的回答闡述的事件連接到GridView和獲取請求ID,但是SO編輯正在拒絕它,沒有很好的理由。上面的代碼經過測試並完全回答了問題)。

2

你可能需要做的是,在RowDataBound事件,得到了ID那裏,然後你DB 然後像做

if(e.Row.RowType != DataControlRowType.DataRow) 
{ 
    return; 
} 

ListView a = (ListView)e.Row.FindControl("listOfItems"); 
a.datasource = // the result of your db call 
a.databind();