【发布时间】:2015-01-11 22:48:26
【问题描述】:
我想从我的应用程序中的每个 Gridview 实现打印/下载 csv。那些通过数据源或直接通过
gvSample.DataSource = Data;
gvSample.DataBind();
现在我的第一个方法是在页脚模板中设置一个下载按钮并在那里处理下载
<asp:GridView ID="gvSample" runat="server">
<PagerTemplate>
<asp:ImageButton ImageUrl="~/download.gif" OnClick="dl_Click" runat="server" ID="dl"/>
</PagerTemplate>
</asp:GridView>
和
protected void dl_Click(object sender, ImageClickEventArgs e)
{
GridView gv = (GridView)this.Parent.Parent.Parent.Parent;
string csv = ToCSV(gv.DataSource); //gv.DataSource is null, DatasourceID aswell
Response.ContentType = "application/csv";
Response.AddHeader("content-disposition", "attachment; filename=file.csv");
Response.Write(csv);
Response.End();
}
但我无法访问数据。
【问题讨论】:
-
粘贴整个 gridview .aspx 代码
-
在使用 jQuery TableTools 或 RadGrid 的自定义导出方法之前,我只能处理这个问题。 DataSource 本质上是只写的,在后续调用中它将为空,因为数据现在已绑定。我想你可以通过将数据放在 Session 或 ViewState 中来处理这个问题 - 但在这两种情况下,我强烈建议你不要这样做。
-
不要使用字符串 csv = ToCSV(gv.DataSource),尝试使用字符串 csv = ToCSV(Data)
-
我能指出 CSV 不是一种很好的数据传输格式吗?相反,您应该使用 Open Office XML 电子表格/Excel 文件(如果打算供人类使用)或 XML/JSON(如果打算供计算机使用)。此外,GridView 是一个 UI 控件。它不应作为应用程序中的数据源。
标签: c# asp.net gridview datasource postback