2012-04-23 8 views
0

나는 GridView를 가지고 있으며 코드 뒤에는 페이지의 Click Click 이벤트에 Excel 시트로 변환 중입니다 ......... 코드는 다음과 같습니다. aspx. 다음과 같이 Excel로 변환하는 동안 GridView에서 열 제거

<form id="form1" runat="server"> 
    <table width="1100" border="0" cellpadding="0" cellspacing="0" style="height:100%; background-color:White" align="center"> 
      <tr><td>&nbsp;</td></tr> 
      <tr> 
       <td align="center"> 
        <asp:Button ID="DividendEportToExcel" runat="server" Text="Convert To Excel" 
         CssClass="bluesome" onclick="DividendEportToExcel_Click" />  
       </td> 
      </tr> 
      <tr> 
       <td> 
        <asp:GridView ID="MemberDividendView" runat="server"> 
           </asp:GridView> 
       </td> 
      </tr> 
    </table> 
</form> 

그리고 코드에

내가 뭐하는 거지 뒤에 :

protected void DividendEportToExcel_Click(object sender, EventArgs e) 
    { 
     MemberDividendView.Columns.RemoveAt(5); 
     MemberDividendView.ShowHeader = true; 
     MemberDividendView.GridLines = GridLines.Both; 
     MemberDividendView.PagerSettings.Visible = false; 
     MemberDividendView.DataBind(); 
     ChangeControlsToValue(MemberDividendView); 
     Response.ClearContent(); 
     Response.AddHeader("content-disposition", "attachment; filename=AdjustmentDetialsToExcel.xls"); 
     Response.ContentType = "application/excel"; 
     StringWriter sWriter = new StringWriter(); 
     HtmlTextWriter hTextWriter = new HtmlTextWriter(sWriter); 
     HtmlForm hForm = new HtmlForm(); 
     MemberDividendView.Parent.Controls.Add(hForm); 
     hForm.Attributes["runat"] = "server"; 
     hForm.Controls.Add(MemberDividendView); 
     hForm.RenderControl(hTextWriter); 
     Response.Write(sWriter.ToString()); 
     Response.End(); 
     } 

    private void ChangeControlsToValue(Control gridView) 
    { 
     Literal literal = new Literal(); 

     for (int i = 0; i < gridView.Controls.Count; i++) 
     { 
      if (gridView.Controls[i].GetType() == typeof(LinkButton)) 
      { 

       literal.Text = (gridView.Controls[i] as LinkButton).Text; 
       gridView.Controls.Remove(gridView.Controls[i]); 
       //gridView.Controls.AddAt(i,literal); 
      } 
      else if (gridView.Controls[i].GetType() == typeof(DropDownList)) 
      { 
       literal.Text = (gridView.Controls[i] as DropDownList).SelectedItem.Text; 
       gridView.Controls.Remove(gridView.Controls[i]); 
       //gridView.Controls.AddAt(i,literal); 
      } 
      else if (gridView.Controls[i].GetType() == typeof(CheckBox)) 
      { 
       literal.Text = (gridView.Controls[i] as CheckBox).Checked ? "True" : "False"; 
       gridView.Controls.Remove(gridView.Controls[i]); 
       //gridView.Controls.AddAt(i,literal); 
      } 
      if (gridView.Controls[i].HasControls()) 
      { 
       ChangeControlsToValue(gridView.Controls[i]); 

      } 
     } 
    } 

을하지만 여전히 내 열은 엑셀 시트에서 삭제되지 않는 ........ 오류는 무엇인가 ??

+0

MemberDividendView.Columns.RemoveAt (5)가가 MemberDividendView.Columns 시도 –

+0

엑셀로 변환하면서 난의 gridview에서 특정 항목을 삭제하기위한 무슨 [5] .Visible = 거짓; –

+0

Shoaib 나는 그것을 시도했지만 여전히 작동하지 않는다 –

답변

1
  1. 내보내기 전에 열을 제거하려면 DataSource에 GridView을 바인딩해야합니다.
  2. 그들을
  3. 당신은 서버 컨트롤이 양식의 외부 렌더링되었다는 ASP.NET 예외를 방지하기 위해 새 서버 양식을 만들 필요가 없습니다 제거하는 대신에 그들 Viusible=false을 설정하십시오.

    당신은 대신 엑셀에서 해석되는 HTML - 테이블의 파일을 엑셀 내가 진짜를 만드는 것이 좋습니다 VerifyRenderingInServerForm

    public override void VerifyRenderingInServerForm(Control control) 
    { 
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET 
        server control at run time. */ 
    } 
    
  4. 를 재정 의하여이 execption을 피할 수 있습니다. EPPlus을 권해드립니다.

관련 문제