2015-09-11 5 views
0

Так что мне удалось загрузить мою область администрирования для загрузки пользователем в формате 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> 
+0

У вас действительно есть некоторые неправильные процедуры обработки файлов. Вы передаете GridView в HTML, обслуживая его с помощью MIME-типа Excel и расширения .XML? Вместо того, чтобы думать о нем как о «экспорте GridView», почему бы не подумать об этом как об экспорте фильтрованных данных? Получите данные из источника, примените фильтры, а затем используйте управляемую библиотеку для экспорта в качестве фактического файла HTML, XML или .XLSX, а не какой-нибудь странной мешанины? Кроме того, вы оставляете SqlConnection открытым во время всего экспорта. Вы должны выйти из инструкции using, как только вы закончите поиск ваших данных. – mason

+0

Ну, я думаю, что это экспортирует отфильтрованные данные. Это то, чего я пытаюсь достичь ... gridview - это просто просмотр, на который администратор может использовать фильтры, а затем экспортировать отфильтрованные данные для использования в другом приложении. Не могли бы вы рекомендовать лучший синтаксис для обработки этого процесса? Предполагается, что вся эта кнопка должна экспортировать в xml-файл, какие видимые данные. Я сделал изменение для моего кода, закрывающего соединение sql ранее, как только данные были восстановлены. – SavageDragon87

+0

Конечно. Извлеките данные непосредственно из базы данных, не помещайте их в 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

ответ

0

Ваш GridView фильтруется, но при экспорте, вы работаете новый SQL запрос без фильтров. Вам нужно будет либо добавить предложение where к вашему запросу, которое фильтрует результаты, либо каким-либо образом сохранит ваш источник данных gridview (Viewstate, Session, Cache ...) и использует его в качестве источника данных экспорта.

+0

У вас есть правильное представление о том, чего я пытаюсь достичь. Мне нужен gridview, чтобы нетехнические пользователи могли использовать эту настройку. В идеале я хочу попытаться получить отфильтрованное представление в качестве нового источника данных и экспортировать его, а не экспортировать все. – SavageDragon87

Смежные вопросы