экспорт сетки в файл Excel - PullRequest
0 голосов
/ 11 ноября 2011

у меня есть этот код, он продолжает давать мне ошибку

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim response As HttpResponse = HttpContext.Current.Response()
    response.Clear()
    response.AddHeader("content-disposition", "attachment;filename=XXXXXX.xls")
    response.ContentType = "application/vnd.ms-excel"
    Dim s As System.IO.StringWriter = New System.IO.StringWriter
    Dim htw As HtmlTextWriter = New HtmlTextWriter(s)
    GridView1.RenderControl(htw)
    response.Write(s.ToString)
    response.End()
End Sub
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)

End Sub

ошибка возникает после того, как я нажимаю на экспорт: RegisterForEventValidation может быть вызван только во время

Render(); 

, и он выделяет этот скрипт

 GridView1.RenderControl(htw)

любые советы

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Отключить проверку события на уровне страницы:

<%@ Page Language="VB" AutoEventWireup="false" EnableEventValidation="false"  ...

Но я бы предложил создать настоящий файл Excel и записать этот двоичный файл в поток вместо таблицы HTML. EppPlus настоятельно рекомендуется, прост в использовании и поддерживает LINQ. (* 1 010 * GPLv2 ).

0 голосов
/ 08 апреля 2012

** Скопировать Вставьте приведенную ниже кодировку и проверьте вывод ** перед этим Добавить ссылку в Библиотека объектов Microsoft Excel 11.0 / Библиотека объектов Microsoft Excel 12.0 / Библиотека объектов Microsoft Excel 14.0

        String fileName ="GVtoExcel";

        Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

        ExcelApp.Application.Workbooks.Add(Type.Missing);
        for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
        {

            ExcelApp.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;

        }
        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
        {

            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {

                ExcelApp.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();

            }

        }
        ExcelApp.ActiveWorkbook.SaveCopyAs(fileName);

        ExcelApp.ActiveWorkbook.Saved = true;

        ExcelApp.Quit();
       System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);
       ExcelApp = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...