2015-04-05 67 views
0

我有一个网格视图内的网格视图。当我点击编辑父网格视图时,子网格视图显示一个复选框。当我点击子网格视图的下一页按钮时,可见的控件再次变得不可见。这不是我需要的行为。我希望通过单击编辑使可见的控件通过分页的子网格视图保持可见,而父网格视图处于编辑模式。通过分页嵌套gridview保留控件的可见属性

我的标记:

<asp:GridView 
    ID="grdImages" 
    runat="server" 
    AllowPaging="true" 
    ShowFooter="true" 
    PageSize="5" 
    AutoGenerateColumns="false" 
    OnPageIndexChanging="grdImages_PageIndexChanging" 
    OnRowCancelingEdit="grdImages_RowCancelingEdit" 
    OnRowCommand="grdImages_RowCommand" 
    OnRowEditing="grdImages_RowEditing" 
    OnRowUpdating="grdImages_RowUpdating" 
    OnRowDeleting="grdImages_RowDeleting" 
    EmptyDataText="No Data Available at this Time" 
    OnRowDataBound="grdImages_RowDataBound" 
       DataKeyNames="productID" RowStyle-VerticalAlign="Top" RowStyle-HorizontalAlign="Center"> 
    <AlternatingRowStyle BackColor="White" ForeColor="#284775"></AlternatingRowStyle>   


    <Columns> 

     <asp:TemplateField AccessibleHeaderText="Product ID" HeaderText="Product ID" FooterText="Product ID"> 
      <ItemTemplate> 
       <asp:Label ID="lblProdId" runat="server" Text='<%# Eval("ProductId") %>' ></asp:Label> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:DropDownList ID="lstAddProdId" runat="server" AppendDataBoundItems="true" > 
        <asp:ListItem>Select a product</asp:ListItem> 
       </asp:DropDownList> 
      </FooterTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField AccessibleHeaderText="Product Main Image" FooterText="Product Main Image" HeaderText="Product Main Image"> 
      <ItemTemplate> 
       <asp:Label ID="lblMainImgId" runat="server" Text='<%# Eval("ImageId") %>' ></asp:Label> &nbsp; 
       <asp:Label ID="lblMainImgName" runat="server" Text='<%# Eval("ImageName") %>' ></asp:Label> <br /> 
       <asp:Image ID="imgMain" runat="server" Height="250" Width="250" ImageUrl='<%# Eval("ImagePath") %>' /> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:Label runat="server" Font-Bold="true" Text="Current main image" ></asp:Label> <br /> 
       <asp:Image ID="imgMain" runat="server" Height="250" Width="250" ImageUrl='<%# Eval("ImagePath") %>' /> <br /> 
       <asp:Label runat="server" Font-Bold="true" Text="Upload a new image to replace the current main image." ></asp:Label> <br /> 
       <asp:FileUpload ID="flupEditMain" runat="server" /> 
      </EditItemTemplate> 
      <FooterTemplate> 
       <asp:FileUpload ID="flupMain" runat="server" AllowMultiple="false" /> 
      </FooterTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField AccessibleHeaderText="Supporting Images" FooterText="Supporting Images" HeaderText="Supporting Images"> 
      <ItemTemplate> 
       <asp:Label ID="lblSupImages" runat="server" Visible="false" Font-Bold="true" Text="Select images to delete"></asp:Label><br /> 
       <asp:GridView 
        ID="grdSupImages" 
        runat="server" 
        ShowHeader="false" 
        CellPadding="4" 
        ForeColor="#333333" 
        GridLines="None" 
        AutoGenerateColumns="False"       
        AllowPaging="true" 
        PageSize="4" 
        OnPageIndexChanging="grdSupImages_PageIndexChanging" 
        OnRowEditing="grdSupImages_RowEditing" 
        EnableViewState="true" 
        DataKeyNames="productID" 
        RowStyle-VerticalAlign="Top" 
        RowStyle-HorizontalAlign="Center" 
        EmptyDataText="No Supporting Images Found"> 
        <AlternatingRowStyle BackColor="White" ForeColor="#284775"></AlternatingRowStyle> 
        <Columns> 
         <asp:TemplateField > 
          <ItemTemplate>          
           <asp:Image ID="imgSup" runat="server" ToolTip='<%# Eval("ImgId") %>' AlternateText='<%# Eval("ImageName") %>' ImageUrl='<%# Eval("ImagePath") %>' Height="125" Width="125" /> 
           <asp:Label ID="imgSupName" runat="server" Text='<%# Eval("ImageName") %>' AssociatedControlID="imgSup"></asp:Label> 
           <asp:CheckBox ID="chkSupImages" runat="server" Visible="false" Text="Select Image" CommandName="Select" /> 
          </ItemTemplate> 

         </asp:TemplateField> 
        </Columns> 
        <EditRowStyle BackColor="#999999"></EditRowStyle> 

        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle> 

        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle> 

        <PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle> 

        <RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle> 

        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333"></SelectedRowStyle> 

        <SortedAscendingCellStyle BackColor="#E9E7E2"></SortedAscendingCellStyle> 

        <SortedAscendingHeaderStyle BackColor="#506C8C"></SortedAscendingHeaderStyle> 

        <SortedDescendingCellStyle BackColor="#FFFDF8"></SortedDescendingCellStyle> 

        <SortedDescendingHeaderStyle BackColor="#6F8DAE"></SortedDescendingHeaderStyle> 
       </asp:GridView> 
       <div style="clear:both;">&nbsp;</div> 
       <asp:Label ID="lblFlupSupImages" runat="server" Font-Bold="true" Text="Add extra images" Visible="false" /> 
       <br /> 
       <asp:FileUpload ID="flupSupImages" runat="server" AllowMultiple="true" Visible="false" /> 
      </ItemTemplate> 

      <FooterTemplate> 
       <asp:FileUpload ID="flupExtra" runat="server" AllowMultiple="true" /> 
      </FooterTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Edit"> 
      <ItemTemplate> 
       <asp:LinkButton ID="btnEdit" Text="Edit" runat="server" CommandName="Edit" /> 
       <br /> 
       <span onclick="return confirm('Are you sure you want to delete these images?')"> 
        <asp:LinkButton ID="btnDelete" Text="Delete" runat="server" CommandName="Delete" /> 
       </span> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:LinkButton ID="btnUpdate" Text="Update" runat="server" CommandName="Update" /> 
       <br /> 
       <asp:LinkButton ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" /> 
      </EditItemTemplate> 
      <FooterTemplate> 
       <asp:Button ID="btnAddRecord" runat="server" Text="Add" CommandName="Add"></asp:Button> 
      </FooterTemplate> 
     </asp:TemplateField> 
    </Columns> 

    <EditRowStyle BackColor="#999999"></EditRowStyle> 

    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle> 

    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle> 

    <PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle> 

    <RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle> 

    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333"></SelectedRowStyle> 

    <SortedAscendingCellStyle BackColor="#E9E7E2"></SortedAscendingCellStyle> 

    <SortedAscendingHeaderStyle BackColor="#506C8C"></SortedAscendingHeaderStyle> 

    <SortedDescendingCellStyle BackColor="#FFFDF8"></SortedDescendingCellStyle> 

    <SortedDescendingHeaderStyle BackColor="#6F8DAE"></SortedDescendingHeaderStyle> 
</asp:GridView> 

我后面的代码:

protected void grdImages_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 



     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 

      GridView grd = (GridView)e.Row.FindControl("grdSupImages"); // find controls 
      Label prodId = (Label)e.Row.FindControl("lblProdId"); 
      grd.ToolTip = prodId.Text; 
      int product = Convert.ToInt32(prodId.Text);  // assign values to variables. 
      BindNestedGrid(product, grd);  // call the function. 
     } 

     if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex == grdImages.EditIndex) 
     { 
      //Find Child GridView 
      GridView supImagesGrd = (GridView)e.Row.Cells[2].FindControl("grdSupImages"); 
      if (supImagesGrd != null) 
      { 
       // find grid header label and make visible 
       Label gridHead = (Label)e.Row.Cells[2].FindControl("lblSupImages"); 
       gridHead.Visible = true; 
       // find fileupload header label and make visible. 
       Label fileUpHead = (Label)e.Row.Cells[2].FindControl("lblFlupSupImages"); 
       fileUpHead.Visible = true; 
       // find fileupload control and make it visible. 
       FileUpload flup = (FileUpload)e.Row.Cells[2].FindControl("flupSupImages"); 
       flup.Visible = true; 
       //Loop through the GridView 
       foreach (GridViewRow row in supImagesGrd.Rows) 
       { 
        if (row.RowType == DataControlRowType.DataRow) 
        { 
         //Find the CheckBox 
         CheckBox chb = (CheckBox)row.Cells[0].FindControl("chkSupImages"); 
         if (chb != null) 
         { 
          chb.Visible = true; 
         } 
        } 
       } 
      } 
     } 


} 
protected void grdSupImages_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 

    GridView gv = (GridView)sender;   
    gv.PageIndex = e.NewPageIndex;   
    BindNestedGrid(Convert.ToInt32(gv.ToolTip), gv);   

} 

如果需要更多的信息或代码,请让我知道。

+0

又一次,SO一直没有帮助。我开始认为没有人看到我的问题。这一直在发生在我身上。当我最终解决我的问题时,我会将其作为答案张贴,然后我可能永远不会再访问此网站 – 2015-04-10 15:31:58

+0

也代表我编辑我的问题非常烦人,尤其是当这些编辑删除我的先发制人的感谢。如果你不打算帮忙,然后把你的编辑留给你自己 – 2015-04-10 15:35:44

+0

首先,我想同意编辑(将2个句子变成跑道句并除去你的感谢)是不需要的,我会也让他们感到不安。其次,当您询问有关容易识别的问题的具体问题时,SO的工作效果最佳。这个问题(在我看来)太大了。如果您可以生成重现错误并删除无关事件的示例项目,则某人可以复制该代码并运行它并重现您的问题。那么你会更有可能得到答案。事实上,现在,它需要大量的努力来帮助你。 – DeadZone 2015-04-10 16:28:43

回答

0

对于任何想要知道的人,当单击编辑按钮时,我禁用了对子网格的分页,因此所有复选框现在都显示在子网格的所有行上。