locked
Hideing button inside nested grid view RRS feed

  • Question

  • User-172769993 posted

    I am trying to hide button btnadddetail when i export master and child grid-view to excel.

    but the problem is btnadddetail inside child grid-view template.So if i tried to set btnadddetail visible property to false i get error that btnadddetail is not defined.

    i have tried the below code but button btnadddetail still visible.

    protected void btnexcel_Click(object sender, EventArgs e)
    {
        gridrequisitions.DataSource = r.GetRequisition();
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition",
            "attachment;filename=RequisitionsReport.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        gridrequisitions.GridLines = GridLines.Both;
        gridrequisitions.DataBind();
    
        foreach (GridViewRow row in gridrequisitions.Rows)
        {
            GridView gvItems = row.Cells[0].FindControl("gvItems") as GridView;
            gvItems.Columns[0].Visible = false;
            gvItems.Columns[1].Visible = false;
            gvItems.Columns[2].Visible = false;
        }
    
        gridrequisitions.Caption = "Requisitions Report";
    
        foreach (GridViewRow row in gridrequisitions.Rows)
        {
            foreach (TableCell cell in row.Cells)
            {
                for (int i = cell.Controls.Count - 1; i >= 0; i--)
                {
                    if (cell.Controls[i] is Image)
                    {
                        Image img = cell.Controls[i] as Image;
    
    
                        if (img.ImageUrl.Contains("plus.png") || img.ImageUrl.Contains("minus.png"))
                        {
                            cell.Controls.RemoveAt(i);
                        }
                    }
                }
            }
        }
    
        gridrequisitions.Columns[1].Visible = false;
        gridrequisitions.Columns[2].Visible = false;
        Button btnadddetail = (Button)sender;
        btnadddetail.Visible = false;
        this.ClearControls(gridrequisitions);
        gridrequisitions.RenderControl(hw);
        //style to format numbers to string
        string style = @"<style> .textmode { mso-number-format:\@; } </style>";
        Response.Write(style);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
    }
    <asp:GridView ID="gridrequisitions" OnRowDataBound="gridrequisitions_RowDataBound" OnRowCommand="gridrequisitions_RowCommand" DataKeyNames="RequisitionID" runat="server" CssClass="table table-bordered text-nowrap" AutoGenerateColumns="False">
        <Columns>
            <asp:TemplateField HeaderText="Preview">
                <ItemTemplate>
                    <asp:Image ID="imgPlus" runat="server" AlternateText="" ImageUrl="img/plus.png" Style="cursor: pointer" />
                    <asp:Panel ID="pnlproducts" runat="server" Style="display: none">
                        <asp:GridView ID="gvItems" CssClass="table table-bordered" OnRowCommand="gvItems_RowCommand" OnRowDataBound="gvItems_RowDataBound" runat="server" AutoGenerateColumns="false">
                            <Columns>
                                <asp:BoundField DataField="ItemID" HeaderText="ItemID" SortExpression="ItemID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" />
                                <asp:BoundField DataField="ItemName" HeaderText="Item Name" SortExpression="ItemName" />
                            </Columns>
                        </asp:GridView>
                        <div class="row" runat="server" id="hidebtn">
                            <br />
                            <div class="col-md-4">
                                <asp:Button ID="btnadddetail" OnClick="btnadddetail_Click" runat="server" Text="Add New Item" CssClass="btn btn-default" Width="200px" ForeColor="Black" />
                            </div>
                        </div>
                    </asp:Panel>
                </ItemTemplate>
        </Columns>
    </asp:GridView>


    Saturday, August 13, 2016 7:06 PM

Answers

  • User2103319870 posted

    Button btnadddetail = (Button)sender; btnadddetail.Visible = false;

    You cannot find the control like above code because here the sender is btnExcel and not btnaddnew. You may need to use the findcontrol to find the button and hide it

     foreach (GridViewRow row in gridrequisitions.Rows)
                {
                    GridView gvItems = row.Cells[0].FindControl("gvItems") as GridView;
                    gvItems.Columns[0].Visible = false;
                    gvItems.Columns[1].Visible = false;
                    gvItems.Columns[2].Visible = false;
    
                    Button btn = row.FindControl("btnadddetail") as Button;
                    btn.Visible = false;
                }

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Saturday, August 13, 2016 7:53 PM