如何将更新面板导出到Excel

时间:2013-12-04 10:41:28

标签: asp.net updatepanel export-to-excel

 <asp:UpdatePanel ID="updatePanel" runat="server">
            <ContentTemplate>
      <table>......Lots of data......</table>
    <asp:Timer ID="timerAutoRefresh" runat="server" OnTick="timerAutoRefresh_Tick">
                </asp:Timer>
            </ContentTemplate>
    <Triggers><asp:AsyncPostBackTrigger ControlID="btnExport" EventName="click"></asp:AsyncPostBackTrigger>
            </Triggers>
        </asp:UpdatePanel>

<asp:Button ID="btnExport" runat="server" Width="62px" Text="Export" CssClass="cssButton"
 OnClick="btnExport_Click" />


public override void VerifyRenderingInServerForm(Control control)
    {//Verifies that the control is rendered

    }
    protected void btnExport_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.xls";
            StringWriter stringWrite = new StringWriter();
            HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
            updatePanel.RenderControl(htmlWrite);
            Response.Write(stringWrite.ToString());
            Response.End();
        }

我必须将更新面板中的任何数据导出到Excel工作表中。我有一个 我的MasterPage中的Ajax Scriptmanager。

当我点击导出按钮时,它会给我这个错误:

Error: Sys.WebForms.PageRequestManagerServerErrorException: Script control 'timerAutoRefresh' is not a registered script control. Script controls must be registered using RegisterScriptControl() before calling RegisterScriptDescriptors().
Parameter name: scriptControl

如何将更新面板中的数据导出到Excel工作表?

1 个答案:

答案 0 :(得分:1)

这对我有用:

网页

<form id="form1" runat="server">
    <asp:ScriptManager runat="server" ID="ScriptManager1">
    </asp:ScriptManager>
    <asp:UpdatePanel runat="server" ID="UpdatePanel1">
        <ContentTemplate>
            <asp:Table ID="Table1" runat="server">
                <asp:TableRow runat="server">
                    <asp:TableCell runat="server">Test</asp:TableCell>
                </asp:TableRow>
            </asp:Table>
            <asp:Label runat="server" Text="Page not refreshed yet." ID="Label1">
            </asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="tick"></asp:AsyncPostBackTrigger>
        </Triggers>
    </asp:UpdatePanel>
    <asp:Button ID="btnExport" runat="server" Width="62px" Text="Export" OnClick="btnExport_Click" />
    <asp:Timer runat="server" ID="Timer1" Interval="10000" OnTick="Timer1_Tick">
    </asp:Timer>
    <asp:Label runat="server" Text="Label" ID="Label2"></asp:Label>

代码背后

protected void Timer1_Tick(object sender, EventArgs e)
{
   Label1.Text = "Panel refreshed at: " +
                   DateTime.Now.ToLongTimeString();
}

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

protected void btnExport_Click(object sender, EventArgs e)
{
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("content-disposition", "attachment;filename=MyFiles.xls");
        Response.Charset = "";
        this.EnableViewState = false;

        StringWriter stringWrite = new StringWriter();
        HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
        UpdatePanel1.RenderControl(htmlWrite);
        Response.Write(stringWrite.ToString());
        Response.End();
}

我需要做的是将计时器控件移到UpdatePanel之外并关联AsyncPostBackTrigger。我还需要删除按钮单击的AsyncPostBackTrigger(希望你不需要这个)。