在Web应用程序中将Gridview导出到Excel

希望你们能帮助我。 我尝试了很多不同的东西,不能得到这个工作。

我在更新面板中有一个gridview如下:

<asp:UpdatePanel ID="udpReport" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true"> <ContentTemplate> <asp:GridView runat="server" ID="preferenceReportGrd" AutoGenerateColumns="false" AutoGenerateSelectButton="false" CaptionAlign="Top" EnableSortingAndPagingCallbacks="false" HorizontalAlign="left" CssSelectorClass="gvwPrefReport"> <Columns> <asp:BoundField ReadOnly="true" DataField="ClientName" HeaderText="Company Name" /> <asp:BoundField ReadOnly="true" DataField="typeDescription" HeaderText="Preference" /> <asp:BoundField ReadOnly="true" DataField="defaultValue" HeaderText="Default Preference" /> <asp:BoundField ReadOnly="true" DataField="previousPreferenceValue" HeaderText="Previous Preference" /> <asp:BoundField ReadOnly="true" DataField="selectedValue" HeaderText="New Preference" /> <asp:BoundField ReadOnly="true" DataField="lastUpdated" HeaderText="Date Last Edited" /> </Columns> </asp:GridView> <div> <user:MsgLine runat="server" ID="MsgLine1" /> </div> </ContentTemplate> </asp:UpdatePanel> 

我正在试图导出这个gridview出excel。 有一个button,用户点击它调用该button的on_click方法,在这on_click我有以下几点:

  string attachment = "attachment; filename=Employee.xls"; Response.AddHeader("content-disposition", attachment); Response.ContentType = "application/excel"; StringWriter stw = new StringWriter(); HtmlTextWriter htextw = new HtmlTextWriter(stw); preferenceReportGrd.RenderControl(htextw); Response.Write(stw.ToString()); Response.End(); 

我从这个尝试debugging没有得到任何东西,似乎当我把鼠标移到stw.tostring()GridView的所有值都在那里,但没有写出来。

是。 在更新面板标签excel导出不工作。 我面临同样的问题。 要解决此问题,请在更新面板标记的末尾使用以下代码

 </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="BtnExport" /> </Triggers> </asp:UpdatePanel> 

它甚至可以在更新面板中工作

如果GridView和/或button位于更新面板中并带有asynchronous回发,我不相信您可以更改响应标头或信息。 尝试在button触发器上进行完整回发来运行,看看会发生什么。 你的代码看起来不正确,但我没有尝试过…

看看这个样本…
C-sharpcorner
2. Matt Berseth
3. 代码项目

检查您的内容types和导出button上的PostBackTrigger。

对于Excel 2003

 Response.ContentType = "application/vnd.ms-excel 

对于Excel 2007

 Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 

你可以看看这个博客文章的内容types的来源。

编辑:从您的意见:你需要设置一个PostBackTrigger面板上包含的button做导出,而不是包含GridView的面板。

编辑编辑:你的文件不是什么,说这是错误是由于一个称为扩展强化function,目前在Excel 2007中。检查此StackOverflow问题的更多信息; 我链接到一篇博客文章,描述这个错误的推理和一个可能的解决方法。

我能够在一个简单的页面中解决这个问题的方法是在updatepanel之外创build一个隐藏的gridview,并将其设置为等于更新面板中的gridview,以使它们相同(除了新的一个被隐藏)。 然后将这个隐藏的网格导出到Excel,就像以前一样。

这样做的一个问题是,导出超链接也需要在更新面板之外,这意味着您可能无法将导出超链接放在所需的位置。

当然,这可能不是最好的办法,它让我在当时的这个问题。 希望能帮助到你。