2014-12-05 3 views
1

Этот вопрос был задан для дальнейшего обсуждения на this question.Gridview пустые строки при экспорте в CSV - SOLVED

Ниже приведена процедура, которую я использую для создания файла CSV. Все работает отлично, за исключением того, что я получаю только заголовки столбцов и строк.

protected void CSVReport_Click(object sender, EventArgs e) 
    { 

     Response.Clear(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment;filename=PeopleReportTest.csv"); 
     Response.Charset = ""; 
     Response.ContentType = "text/csv"; 
     Response.AddHeader("Pragma", "public"); 

     GridView1.AllowSorting = false; 
     GridView1.AllowPaging = false; 
     GridView1.DataBind(); 

     StringBuilder sb = new StringBuilder(); 
     for (int k = 1; k < GridView1.Columns.Count; k++) 
     { 
      //add separator 
      sb.Append(GridView1.Columns[k].HeaderText + ','); 
     } 
     //append new line 
     sb.Append("\r\n"); 
     for (int i = 0; i < GridView1.Rows.Count; i++) 
     { 
      for (int k = 1; k < GridView1.Columns.Count; k++) 
      { 
       //add separator 
       sb.Append(GridView1.Rows[i].Cells[k].Text + ','); 
      } 
      //append new line 
      sb.Append("\r\n"); 
     } 
     Response.Output.Write(sb.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 

На осмотр, я могу видеть, что GridView1.Rows[i].Cells[k].Text всегда возвращает пустое значение.

Таким образом, проблема может быть связана со структурой моего gridview. Я знаю, что код не работает, если у меня есть TemplateFields, но у меня есть только один, и он установлен в невидимый.

Все остальные поля: DynamicFields. Может ли это быть проблема?

Вот разметка:

<asp:GridView ID="GridView1" runat="server" 
      CssClass="table table-condensed borderless" 
      HeaderStyle-HorizontalAlign="Left" 
      AllowPaging="True" AllowSorting="True" 
      DataSourceID="GridDataSource" 
      DataKeyNames="PersonID" OnRowCommand="GridView1_RowCommand" 
      AutoGenerateColumns="false" 
      OnDataBound="GridView1_DataBound" PageSize="15"> 
      <Columns> 
       <asp:templatefield itemstyle-width="0%" visible="false"> 
        <itemtemplate> 
         <aspf:dynamichyperlink id="detailshyperlink" runat="server" 
          text="details" /> 
        </itemtemplate> 

       </asp:templatefield> 

       <asp:DynamicField DataField="Name" HeaderText="Name"/> 
       <asp:DynamicField DataField="PersonCategory" HeaderText="Category" /> 
       <asp:DynamicField DataField="PositionDescription" HeaderText="Position" /> 
       <asp:DynamicField DataField="Description" HeaderText="Topic" /> 
       <asp:DynamicField DataField="FellowsResponsibility" HeaderText="Responsibility" /> 
       <asp:DynamicField DataField="PartnerSurname" HeaderText="Partner"/> 
      </Columns> 

      <PagerStyle CssClass="footer" /> 
      <PagerTemplate> 
       <asp:GridViewPager runat="server" /> 
      </PagerTemplate> 
      <EmptyDataTemplate> 
       There are currently no items in this table. 
      </EmptyDataTemplate> 
</asp:GridView> 

ответ

1

OK Я обнаружил, что проблема была.

Я не мог найти другие подобные сценарии, поэтому я отвечаю на свой вопрос, если кто-то найдет его полезным.

Решение было просто заменить все мои DynamicFields на стандарт BoundFields и BOOM все данные были там.

В следующий раз я не буду использовать DynamicData рамки, это точно.

+1

отличный @dura, рад, что вы нашли его по своему усмотрению. ура !!! Кроме того, вы можете пометить свой ответ как принятый. – Devjosh

+1

Спасибо за помощь. Примите мой ответ, когда мне разрешат. –

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