Так что мне удалось загрузить мою область администрирования для загрузки пользователем в формате XML-файла. Однако я включил некоторые параметры фильтрации, чтобы пользователь вошел в систему, чтобы сузить результаты, доступные для просмотра. То, что я пытаюсь добиться, - это после того, как пользователь применит эти фильтры, чтобы иметь возможность экспортировать только отфильтрованные данные.Экспорт только отфильтрованных данных из gridview asp.net
код ниже:
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, обслуживая его с помощью MIME-типа Excel и расширения .XML? Вместо того, чтобы думать о нем как о «экспорте GridView», почему бы не подумать об этом как об экспорте фильтрованных данных? Получите данные из источника, примените фильтры, а затем используйте управляемую библиотеку для экспорта в качестве фактического файла HTML, XML или .XLSX, а не какой-нибудь странной мешанины? Кроме того, вы оставляете SqlConnection открытым во время всего экспорта. Вы должны выйти из инструкции using, как только вы закончите поиск ваших данных. – mason
Ну, я думаю, что это экспортирует отфильтрованные данные. Это то, чего я пытаюсь достичь ... gridview - это просто просмотр, на который администратор может использовать фильтры, а затем экспортировать отфильтрованные данные для использования в другом приложении. Не могли бы вы рекомендовать лучший синтаксис для обработки этого процесса? Предполагается, что вся эта кнопка должна экспортировать в xml-файл, какие видимые данные. Я сделал изменение для моего кода, закрывающего соединение sql ранее, как только данные были восстановлены. – SavageDragon87
Конечно. Извлеките данные непосредственно из базы данных, не помещайте их в GridView или DataGrid (потому что они предназначены только для отображения), используйте [XML-сериализатор для генерации XML-файла] (http://stackoverflow.com/questions/2948255/xml-file-creation-using-xdocument-in-c-sharp), используйте его с расширением .xml и [соответствующим типом MIME] (http://stackoverflow.com/questions/4832357/whats-the- разница между ними-текста XML-против-приложений XML-для-веб-сервиса-RESPONS). – mason