2017-04-04 143 views
0

親愛的所有天才,請幫助我一直在努力嘗試,但沒有運氣。我試圖打開我的嵌套gridview爲單個父行,但獲取與子行的單個記錄打開整個父行。應該是當我點擊父級gridview行的按鈕時,那麼特定行的記錄應該顯示在同一Parent行的Child gridview中,但在我的情況下,父行的記錄顯示出來並且Child gridview被打開在所有的父行中。請需要幫助:( enter image description hereasp.net C#Gridview嵌套gridview

<asp:GridView runat="server" ID="GridView4" AllowPaging="True" 
    AutoGenerateColumns="False" DataKeyNames="UId" class="" CellPadding="4" PageSize="5"> 
    <AlternatingRowStyle BackColor="White" /> 
    <Columns> 
     <asp:TemplateField HeaderText="File Type" Visible="false"> 

      <ItemTemplate> 
       <asp:Label ID="lblFileType" runat="server" Text='<%# Eval("FileType") %>'></asp:Label> 
      </ItemTemplate> 
      <HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" Width="10%" /> 
      <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Width="10%" /> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Image Name" Visible="false"> 

      <ItemTemplate> 
       <asp:Label ID="lblImageName" runat="server" Text='<%# Eval("ImageName") %>'></asp:Label> 
      </ItemTemplate> 
      <HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" Width="10%" /> 
      <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Width="10%" /> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText=""> 
      <ItemTemplate> 
       <asp:ImageButton ID="Image2" class="img1" runat="server" ImageUrl='<%# Bind("pic") %>' OnCommand="blah_Command" CommandName='<%# Eval("UId") %>' CommandArgument='<%# Eval("pic") %>' /> 

       <asp:Panel ID="pnlOrders" runat="server" Style="position: relative" Visible="false"> 
        <asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid"> 
         <Columns> 
          <asp:BoundField ItemStyle-Width="150px" DataField="FileSize" HeaderText="Order Id" /> 
          <asp:BoundField ItemStyle-Width="150px" DataField="ShareByUserId" HeaderText="Date" /> 
         </Columns> 
        </asp:GridView> 
       </asp:Panel> 

      </ItemTemplate> 

     </asp:TemplateField> 

    </Columns> 
    <FooterStyle BackColor="#ffffff" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#ffffff" Font-Bold="True" ForeColor="White" /> 

</asp:GridView> 

代碼背後:

protected void blah_Command(object sender, CommandEventArgs e) 
{ 
    foreach (GridViewRow row2 in GridView4.Rows) 
    { 
     row2.FindControl("pnlOrders").Visible = true; 

     string customerId = e.CommandName.ToString(); 
     GridView gvOrders = row2.FindControl("gvOrders") as GridView; 
     BindOrders(customerId, gvOrders); 
    } 
} 

private void BindOrders(string customerId, GridView gvOrders) 
{ 
    gvOrders.ToolTip = customerId; 
    gvOrders.DataSource = GetData(string.Format("select * from SShare where UId='{0}'", customerId)); 
    gvOrders.DataBind(); 
} 
+0

代碼大部分是正確的。請在查詢中使用參數。首先你爲什麼要寫:'foreach(GridViewRow row2 in GridView4.Rows)'?使用發件人和相對容器代替該代碼。 如果它不能解決,你可以嘗試在沒有ImageButton的RowDataBound事件中做到這一切嗎?我建議改變你的思路:GridvView很難以這種方式使用。您可以使用疊加層(thickbox,colorbox ...)並在其中打開嵌套的GridView。或者你執行你的目標客戶端... – Emanuele

+0

@Emanuele謝謝,讓我檢查並再試一次。 –

回答

0

您在循環中的所有行GridView4,所以每一個嵌套的GridView將充滿數據 你需要什麼。點擊LinkBut​​ton所在行的行號,並用它來查找嵌套的GridView。

protected void blah_Command(object sender, CommandEventArgs e) 
{ 
    //get the current datagrid item from the sender 
    GridViewRow row = (GridViewRow)(((Control)sender).NamingContainer); 

    //the row index of the gridviewrow 
    int rowIndex = row.RowIndex; 

    //find the correct nested grid using the row index 
    GridView gvOrders = GridView4.Rows[rowIndex].FindControl("gvOrders") as GridView; 
} 
+0

全部感謝你工作!哇!!! –

+0

protected void blah_Command(object sender,CommandEventArgs e) \t { \t ImageButton imgshow =(sender as ImageButton); \t GridViewRow row =(imgshow.NamingContainer as GridViewRow); \t row.FindControl(「pnlOrders」)。Visible = true; \t GridView gvOrders = GridView4.Rows [rowIndex] .FindControl(「gvOrders」)as GridView; \t string customerId = e.CommandName.ToString(); \t BindOrders(customerId,gvOrders); \t} –