希望你们能帮助我。我尝试了很多不同的东西,不能让它发挥作用。
我在更新面板中有如下的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。用户点击它的按钮调用该按钮的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();
我从这个尝试过的调试中得不到什么似乎当我将鼠标移到stw.tostring()上时,gridview的所有值都存在,但没有任何内容被写出来。
答案 0 :(得分:3)
是。在更新面板标签内excel导出不起作用。我面临同样的问题。 要解决此问题,请在更新面板标记
的末尾使用以下代码</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="BtnExport" />
</Triggers>
</asp:UpdatePanel>
它甚至可以在更新面板中工作
答案 1 :(得分:2)
如果GridView和/或按钮位于带有异步回发的更新面板中,我不相信您可以更改响应标头或信息。尝试使用按钮触发器上的完整回发再次运行它,看看会发生什么。你的代码看起来不正确,但我没试过......
看一下这个样本......
1. c-sharpcorner
2. Matt Berseth
3. Code Project
答案 2 :(得分:1)
检查导出按钮上的内容类型和PostBackTrigger。
对于Excel 2003
Response.ContentType = "application/vnd.ms-excel
对于Excel 2007
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
您可以check out this blog post获取我的内容类型来源。
编辑:从您的评论: 您需要在包含执行导出的按钮的面板上设置PostBackTrigger,而不是包含GridView的面板。
编辑编辑:您的文件不是它说的错误是由于Excel 2007中存在一项称为扩展加固的功能。请查看this StackOverflow question以获取更多信息;我链接到blog post,描述了此错误的原因以及可能的解决方法。
答案 3 :(得分:0)
我在一个简单的页面中解决这个问题的方法就是在updatepanel之外有一个隐藏的gridview,并将它设置为更新面板中的gridview,以便它们是相同的(除了为了隐藏新的一个)。然后以与之前相同的方式将此隐藏网格导出到Excel。
这样做的一个问题是导出超链接也需要在更新面板之外,这意味着您可能无法将导出超链接放在所需的位置。
当然这可能不是最好的方法,它让我解决了这个问题。希望它有所帮助。