我必须在我的网页中页面,它允许您搜索名称列表,并将结果返回到网格视图中。显示搜索结果时,将显示导出按钮。我在那里有导出按钮供用户单击,它将数据从网格视图导出为xlsx
格式的excel。这是我目前的代码:
ASP
<asp:TableCell>
<asp:DataGrid ID="ResultGrid" runat="server"
AutoGenerateColumns="false"
EnableViewState="false"
</asp:TableCell>
<asp:TableCell>
<asp:Button class="myClass" ID="export" runat="server" OnClick="ExportBtn_Click" Text="Export" />
</asp:TableCell>
C#
protected void ExportBtn_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=myexcelfile.xls");
Response.ContentType = "application/vnd.xls";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
ResultGrid.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
目前,这会下载一个空白的Excel文件...即使我的网格视图在搜索时有一个项目。
我的其他问题(即使我知道这是不赞成的),是如何导出为xlsx
而不是xls
。如果我将xls
替换为xlsx
,则会在我单击导出按钮时(当它尝试在Excel中打开时)告诉我格式错误。
总结一下,我的两个问题是:为什么它在excel中没有返回任何内容,即使我在网格视图中返回了一行以及如何导出为xlsx
而不是xls
?
答案 0 :(得分:0)
解决了!!! excel是空白的,因为你没有传递任何值
protected void ExportBtn_Click(object sender, EventArgs e)
{
ResultGrid();// Datagrid function to fill value
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "myexcelfile.xls"));
Response.ContentType = "application/ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter ht = new HtmlTextWriter(sw);
ResultGrid.RenderControl(ht);
Response.Write(sw.ToString());
Response.End();
}
答案 1 :(得分:-1)
当您导出到Excel时,您获得空白电子表格的原因是因为您没有以正确的方式执行此操作。
您可以使用 iTextSharp 等第三方正确执行此操作。
实际上,我在博客中写了一个工作示例:GridView To Excel
希望它可以帮助你。