2012-05-11 3 views
1

Мне нужно экспортировать данные gridview в excel. Нет проблем для этого. Все правильно работает Проблема заключается в том, что я могу применять фильтры к данным, отображаемым в сетке. И когда я хочу экспортировать только эти данные (после применения фильтра), он экспортирует ВСЕ данные, содержащиеся ранее в моей сетке, перед фильтром.Экспорт Gridview в Excel: не удается экспортировать правильные данные, отображаемые

Я надеюсь, что я достаточно ясно ...

Это код, я использую:

public void ExportGridToExcel(GridView grdGridView, string fileName) 
    { 
     Response.Clear(); 
     Response.Buffer = true; 

     Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.ms-excel"; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 

     grdGridView.AllowPaging = false; 
     grdGridView.DataBind(); 

     //Change the Header Row back to white color 
     grdGridView.HeaderRow.Style.Add("background-color", "#FFFFFF"); 

     // Apply style to Individual Cells 
     grdGridView.HeaderRow.Cells[0].Style.Add("background-color", "green"); 
     grdGridView.HeaderRow.Cells[1].Style.Add("background-color", "green"); 
     grdGridView.HeaderRow.Cells[2].Style.Add("background-color", "green"); 
     grdGridView.HeaderRow.Cells[3].Style.Add("background-color", "green"); 
     grdGridView.HeaderRow.Cells[4].Style.Add("background-color", "green"); 
     grdGridView.HeaderRow.Cells[5].Style.Add("background-color", "green"); 
     grdGridView.HeaderRow.Cells[6].Style.Add("background-color", "green"); 

     for (int i = 0; i < grdGridView.Rows.Count; i++) 
     { 
      GridViewRow row = grdGridView.Rows[i]; 

      // Change Color back to white 
      row.BackColor = System.Drawing.Color.White; 
      // Apply text style to each Row 
      row.Attributes.Add("class", "textmode"); 
      // Apply style to Individual Cells of Alternating Row 
      if (i % 2 != 0) 
      { 
       row.Cells[0].Style.Add("background-color", "#C2D69B"); 
       row.Cells[1].Style.Add("background-color", "#C2D69B"); 
       row.Cells[2].Style.Add("background-color", "#C2D69B"); 
       row.Cells[3].Style.Add("background-color", "#C2D69B"); 
       row.Cells[4].Style.Add("background-color", "#C2D69B"); 
       row.Cells[5].Style.Add("background-color", "#C2D69B"); 
       row.Cells[6].Style.Add("background-color", "#C2D69B"); 
      } 
     } 
     grdGridView.RenderControl(hw); 

     // style to format numbers to string 
     string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
     Response.Write(style); 
     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 

Что мне делать, чтобы применять фильтры (все работает отлично)

public void refreshGridFactures() 
    { 
     DateTime? debutFacture = null; 
     DateTime? FinFacture = null; 
     DateTime? DebutReglement = null; 
     DateTime? FinReglement = null; 
     int? NumeroFacture = 0; 

     if (PickerDateDebut.SelectedDate != null) { debutFacture = PickerDateDebut.SelectedDate; } 
     if (PickerDateFin.SelectedDate != null) { FinFacture = PickerDateFin.SelectedDate; } 
     if (PickerDebutReglement.SelectedDate != null) { DebutReglement = PickerDebutReglement.SelectedDate; } 
     if (PickerFinReglement.SelectedDate != null) { FinReglement = PickerFinReglement.SelectedDate; } 
     int IdEntreprise = Convert.ToInt32(ddlEntreprises.SelectedValue); 
     string Intitule = txtIntitule.Text; 
     if (txtNumeroFacture.Text != "") { NumeroFacture = Convert.ToInt32(txtNumeroFacture.Text); } 

     List<DBAccess.Facturation> listFacturation = DBAccess.DAOFacturation.GetFactures(IdEntreprise, debutFacture, FinFacture, DebutReglement, FinReglement, Intitule, NumeroFacture); 
     GridFactures.DataSource = listFacturation; 
     GridFactures.DataBind(); 

     double total = Math.Round(listFacturation.Sum(a => a.MontantTTC), 2); 
     double totalHT = Math.Round(listFacturation.Sum(a => a.MontantHT), 2); 

     lblTotalTTC.Text = "Montant total TTC : " + total; 
     lblTotalHT.Text = "Montant total HT : " + totalHT; 
    } 

Спасибо за вашу помощь

+2

На самом деле вы экспорт в HTML, так как 'grdGridView.RenderControl (Hw)' создаст таблицу ;-) –

ответ

3

Сразу после вашего GridViewRow row = grdGridView.Rows[i]; добавьте чек, чтобы узнать, соответствует ли строка видна

if(!row.Visible) continue;

+0

не работает для меня, к сожалению :( – Slrg

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