Gridview to excel: коллекцию Controls нельзя изменить, поскольку элемент управления содержит блоки кода - PullRequest
0 голосов
/ 12 января 2012

Я получаю сообщение об ошибке «Невозможно изменить коллекцию элементов управления, поскольку элемент управления содержит блоки кода». Я хочу экспортировать GridView в 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 Ответ

1 голос
/ 13 января 2012

Я думаю, что это может быть потому, что вы пытаетесь добавить свой 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 */ 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...