2016-07-21 29 views
1

Ich kann Spalten in der übergeordneten Grid-Ansicht ausblenden, wenn ich die Grid-Ansicht in die Excel-Datei mit der Option "visible" exportiert habe.Ausblenden von Kind-Gridview-Spalten beim Exportieren in Excel-Datei

Aber ich muss auch einige Spalten in Kindgitter-Ansicht ausblenden.

Wie kann ich das erreichen?

Export-Code

protected void btnexcel_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     gridItem.DataSource = i.GetItems(); 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", 
     "attachment;filename=Items.xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.ms-excel"; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     gridItem.GridLines = GridLines.Both; 
     gridItem.DataBind(); 
     gridItem.Columns[0].Visible = false; 
     gridItem.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(); 
    } 
    catch (Exception ex) 
    { 
     Response.Write("Error: " + ex.Message); 
    } 
} 

Aspx-Code

<asp:GridView ID="gridItem" GridLines="None" OnRowDataBound="gridItem_RowDataBound" OnRowCommand="gridItem_RowCommand" DataKeyNames="ItemID" runat="server" CssClass="table" 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="pnItemdt runat="server" Style="display: none"> 
        <asp:GridView ID="gvItemdt" CssClass="table table-bordered" runat="server" OnRowCommand="gvItemdt_RowCommand" AutoGenerateColumns="false"> 
         <Columns> 
          <asp:TemplateField HeaderText="Edit"> 
           <ItemTemplate> 
            <asp:LinkButton ID="LinkButton1" OnClientClick="gotop()" runat="server" CssClass="btn btn-primary btn-xs" CausesValidation="False" CommandName="Editob" Text=""><i class="glyphicon glyphicon-pencil"></i></asp:LinkButton> 
           </ItemTemplate> 
           <ControlStyle CssClass="btn btn-primary" /> 
          </asp:TemplateField> 
          <asp:BoundField DataField="Name" HeaderText="Store Name" /> 
         </Columns> 
         <EmptyDataTemplate> 
          "No records found" 
         </EmptyDataTemplate> 
        </asp:GridView> 
       </asp:Panel> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="ItemCode" HeaderText="Item Code" SortExpression="ItemCode" /> 
     <asp:BoundField DataField="ItemName" HeaderText="Item Name" SortExpression="ItemName" /> 

    </Columns> 

</asp:GridView> 

Vielen Dank im Voraus.

Antwort

1

In der Regel können Sie auf Steuerelemente innerhalb einer GridView mit gridView.FindControl("id-of-control") zugreifen.

In diesem Szenario könnten Sie so etwas tun.

gridItem.FindControl("gvItemdt") //this gets you the GridView control 
//you can use DirectCast to call a GridView function on the object 
DirectCast(gridItem.FindControl("gvItemdt"), GridView).Visible=False 

Das ist, wie Sie auf die innere GridView zugreifen würden, und setzen Sie es auf sichtbar = falsch. Wenn Sie auf eine bestimmte Spalte oder ein Steuerelement innerhalb der GridView zugreifen möchten, rufen Sie einfach die gleiche .FindControl() - Funktion auf dem GridView gridItem.FindControl("gvItemdt") auf. Oder greifen Sie auf die Elemente über Spalten und Zeilen zu, wie auch immer Sie es tun möchten.