2012-01-12 60 views
0

我收到错误“控件集合无法修改,因为控件包含代码块”。 我想将GridView导出到Excel。Gridview to excel:控件集合无法修改,因为控件包含代码块

我的方法是:(它的工作原理我已经测试过)

 private void excel() 
    { 
     string dosyaadi; 
     dosyaadi = "Rapor.xls"; 
     String attachment = "attachment; filename=" + dosyaadi; 
     Response.Clear(); 
     Response.ClearHeaders(); 
     Response.ClearContent(); 
     Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254"); 
     Response.Charset = "windows-1254"; 
     Response.AddHeader("content-disposition", attachment); 
     Response.ContentType = "application/ms-excel"; 
     System.IO.StringWriter sw = new System.IO.StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     HtmlForm frm = new HtmlForm(); 
     gvListele.Parent.Controls.Add(frm); 
     frm.Controls.Add(gvListele); 
     frm.RenderControl(htw); 
     Response.Write(" <meta http-equiv='Content-Type' content='text/html; charset=windows-1254' />" + sw.ToString()); 
     Response.End(); 
    } 

和GridView:

  <asp:GridView ID="gvListele" runat="server" AutoGenerateColumns="False" BackColor="White" 
      BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3"> 
      <Columns> 
       <asp:BoundField DataField="talepNo" HeaderText="Talep No" /> 
       <asp:BoundField DataField="urunAdi" HeaderText="İçerik" /> 
       <asp:BoundField DataField="talepEdenBirim" HeaderText="Talep Eden Birim" /> 
       <asp:BoundField DataField="talepKomisyonGelisTarih" HeaderText="Komisyona Geliş Tarihi" /> 
       <asp:BoundField DataField="alimUsulu" HeaderText="Alım Usulü" /> 
       <asp:TemplateField ControlStyle-Width="150" HeaderText="Onay"> 
        <ItemTemplate> 
         <asp:RadioButton ID="rbOnaylandi" runat="server" Text="Onaylandı" GroupName="rblOnay" /> 
         <asp:RadioButton ID="rbBekletildi" runat="server" Text="Bekletildi" GroupName="rblOnay" /> 
         <asp:RadioButton ID="rbReddedildi" runat="server" Text="Reddedildi" GroupName="rblOnay" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
      <FooterStyle BackColor="White" ForeColor="#000066" /> 
      <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> 
      <RowStyle ForeColor="#000066" /> 
      <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> 
      <SortedAscendingCellStyle BackColor="#F1F1F1" /> 
      <SortedAscendingHeaderStyle BackColor="#007DBB" /> 
      <SortedDescendingCellStyle BackColor="#CAC9C9" /> 
      <SortedDescendingHeaderStyle BackColor="#00547E" /> 
     </asp:GridView> 

回答

1

我想这可能是因为你想给你的GridView添加到新的HtmlForm,你可以导出而不用这样做。试试下面的例子中,并在必要时延长:

protected void excel() 
{ 
    String dosyaadi = "Rapor.xls"; 
    Response.Clear(); 
    Response.ClearContent(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment;filename=" + dosyaadi + ".xls"); 
    Response.Charset = ""; 
    Response.ContentEncoding = System.Text.Encoding.Default; 
    Response.ContentType = "application/ms-excel"; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 
    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 
} 

还要确保你在你的C#代码隐藏有这样的覆盖功能:

public override void VerifyRenderingInServerForm(Control control) 
{ 
    /* Verifies that the control is rendered */ 
} 
+0

是的,这就是问题所在。我加了2条线,瞧!谢谢 gvListele.GridLines = GridLines.Both; gvListele.RenderControl(hw); – blackraist 2012-01-13 11:50:06

相关问题