【发布时间】:2015-09-11 12:33:54
【问题描述】:
所以我设法让我的管理区域导出以供用户下载为 xml 文件格式。但是,我已经设置了一些过滤选项,以便登录的用户可以缩小可见的结果范围。我想要实现的是在用户应用这些过滤器之后才能仅导出过滤后的数据。
代码如下:
protected void ExportData_Click(object sender, EventArgs e)
{
string consString = ConfigurationManager.ConnectionStrings["TortoiseDBConnectionString"].ConnectionString;
StringBuilder sb = new StringBuilder();
using (SqlConnection con = new SqlConnection(consString))
{
con.Open();
string sql = ("SELECT [ID], [HouseNumber], [PropAddress], [Town], [County], [PostCode] FROM Zoopla;");
SqlCommand cmd = new SqlCommand(sql, con);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
GridView1.DataBind();
cmd.Dispose();
con.Close();
string filename = "DownloadTest.xml";
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dt;
dgGrid.DataBind();
dgGrid.RenderControl(hw);
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
this.EnableViewState = false;
Response.Write(tw.ToString());
Response.End();
}
}
过滤器设置如下:
Filter By Weeks:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="TortoiseDBZoopla" DataTextField="Weeks" DataValueField="Weeks">
</asp:DropDownList>
Filter By Status:
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" DataSourceID="ZooplaProperties" DataTextField="PropStatus" DataValueField="PropStatus">
</asp:DropDownList>
【问题讨论】:
-
你确实有一些糟糕的文件处理程序。您正在将 GridView 呈现为 HTML,并使用 Excel MIME 类型和 .XML 扩展名提供服务?与其将其视为“导出 GridView”,不如将其视为导出过滤数据?从源获取数据,应用过滤器,然后使用托管库导出为实际的 HTML、XML 或 .XLSX 文件,而不是一些奇怪的大杂烩?此外,您将在整个导出过程中保持 SqlConnection 处于打开状态。检索完数据后,您应该立即退出 using 语句。
-
嗯,我确实认为它是导出过滤数据。这就是我想要实现的目标...... gridview 仅用于收视率,管理员可以使用它来应用过滤器,然后导出过滤后的数据以在另一个应用程序中使用。你能推荐一个更好的语法来处理这个过程吗?所有这个按钮应该做的就是导出到一个 xml 文件中,可以查看的数据是什么。检索到数据后,我已对关闭 sql 连接的代码进行了编辑。
-
当然。直接从数据库中提取数据,不要将其放在 GridView 或 DataGrid 中(因为它们仅用于显示),使用 XML serializer library to generate an XML file,使用 .xml 扩展名和 appropriate MIME type 提供它。