2012-04-23 3 views
0

GridViewがあり、そのコードの背後にあるページのボタンクリックイベントでExcelシートに変換しています.........コードは次のとおりですaspx。GridViewから列を削除してExcelに変換するとき

<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]); 

      } 
     } 
    } 

が、それでも私のコラムは、Excelシートで削除されていない........ エラーは何ですか??

+0

MemberDividendView.Columns.RemoveAt(5) –

+0

をExcelにそれを変換しながらのGridViewから特定の列を削除するため、私は何をすべきかであるあなたがMemberDividendView.Columnsを試みた[5] .Visible = FALSE; –

+0

Shoaib私はそれを試しましたが、まだ動作していません –

答えて

1
  1. エクスポート前に列を削除する場合は、DataSourceにGridViewをバインドする必要があります。
  2. は彼らが
  3. あなたがサーバーコントロールがフォームの外に描画されたことをASP.NETの例外を回避するために、新しいサーバーのフォームを作成する必要はありません削除するのではなく、それらViusible=falseを設定してください。あなたは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を避けることができ

    私は本当を作成することをお勧めだけでExcelから解釈されたHTMLテーブルの代わりにExcelファイル。私はEPPlusをお勧めします。

関連する問題