在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,就像以前一样。
这样做的一个问题是,导出超链接也需要在更新面板之外,这意味着您可能无法将导出超链接放在所需的位置。
当然,这可能不是最好的办法,它让我在当时的这个问题。 希望能帮助到你。