2014-03-07 3 views
0

다른 값 중 하나의 열에 ID를 바인딩하는 ASP.NET GridView가 있습니다.GridView 내 ListView 중첩

이 표의 다른 열에는 GridView에서 ID를 전달하여 해결해야하는 항목 목록이 포함되어야합니다.

는이를 달성하기 위해, 나는의 GridView 내부의 ListView를 내포하고있는 ListView에서 사용되는 ObjectDataSource를의 기본 매개 변수로 ID를 전달했지만,이 구문은 허용되지 않습니다

을 나는 ID를 전달 가야합니까 것은 그래서 나는 리터를 얻을 수있는 방법 그래서
<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> 

아이템 ist?

답변

0

뭔가를 할 DB를 할 GridView가 바인딩 된 후 GridView의 각 행에 대한 ListView에 대해 :

예 : 영문 페이지에서 다음에

<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를 얻을 다음은 다음 항목을 검색하기 위해 GridView 컨트롤에 'OnRowDataBound'이벤트를 부착

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

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