Написать gridview на страницу Excel - PullRequest
0 голосов
/ 11 сентября 2009

Я получаю следующую ошибку

Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.

Хочу поставить сетку в excel по клику

Sub bttntxtfile_Click(ByVal sender As Object, ByVal e As EventArgs)
    GridViewExportUtil.Export("Customers.xls", GridView1)
End Sub

public class GridViewExportUtil
{

public static void Export(string fileName, GridView gv)
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader(
        "content-disposition", string.Format("attachment; filename={0}", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";

    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            //  Create a form to contain the grid
            Table table = new Table();

            //  add the header row to the table
            if (gv.HeaderRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                table.Rows.Add(gv.HeaderRow);
            }

            //  add each of the data rows to the table
            foreach (GridViewRow row in gv.Rows)
            {
                GridViewExportUtil.PrepareControlForExport(row);
                table.Rows.Add(row);
            }

            //  add the footer row to the table
            if (gv.FooterRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                table.Rows.Add(gv.FooterRow);
            }

            //  render the table into the htmlwriter
            table.RenderControl(htw);

            //  render the htmlwriter into the response
           HttpContext.Current.Response.Write(sw.ToString());

        }
    }
}

/// <summary>
/// Replace any of the contained controls with literals
/// </summary>
/// <param name="control"></param>
private static void PrepareControlForExport(Control control)
{
    for (int i = 0; i < control.Controls.Count; i++)
    {
        Control current = control.Controls[i];
        if (current is LinkButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
        }
        else if (current is ImageButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
        }
        else if (current is HyperLink)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
        }
        else if (current is DropDownList)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
        }
        else if (current is CheckBox)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
        }

        if (current.HasControls())
        {
            GridViewExportUtil.PrepareControlForExport(current);
        }
    }
}
}

У меня есть два response.redirects, но я закомментировал их, и я все еще получил ошибку. Кто-нибудь когда-нибудь видел эту ошибку раньше? Я что-то не так делаю?

Я думаю, что это как-то связано со строками httpcontext.current.response.clear и httpContext.current.response.addheader

Ответы [ 2 ]

1 голос
/ 12 сентября 2009

PageRequestManagerParserErrorException может быть вызвано вызовом Response.Write (), если ваша кнопка «Экспорт в Excel» расположена внутри панели обновлений. Либо удалите кнопку из панели обновления, либо используйте PostBackTrigger .

См. эту статью для получения дополнительной информации.

0 голосов
/ 11 сентября 2009

Это должно помочь ..

Это больше о чтении / записи данных в Excel, чем конкретно из gridview, но любой программист .net должен это делать ..

http://support.microsoft.com/kb/316934#10

...