【问题标题】:How to convert gridview data to excel sheet in asp .net with C# lang如何使用 C# lang 在 asp .net 中将 gridview 数据转换为 excel 工作表
【发布时间】:2011-07-04 05:06:26
【问题描述】:

我想将 GridView 数据转换为 Excel 工作表。

我已经写了下面的代码,但它给出了错误:

protected void Button1_Click(object sender, EventArgs e) 
{       
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment;filename=Avukat.xls");
    Response.Charset = "";

    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    GridView1.RenderControl(htmlWrite);
    Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
    Response.Write(stringWrite.ToString());
    Response.End();
}

错误:

“GridView”类型的控件“ctl00_ContentPlaceHolder1_GridView1”必须放置在带有 runat=server 的表单标记内。

【问题讨论】:

    标签: c# asp.net gridview export-to-excel


    【解决方案1】:

    我认为您的 gridview 包含 linkbutton/Imagebutton or another type of control,这就是您在尝试将 GridView 导出到 Excel 时遇到异常的原因。

    在使用该控件之前,您需要在您的 Page 代码后面或 BasePage 代码后面添加以下行。

    public override void VerifyRenderingInServerForm(Control control)
    {
    }
    

    您可以使用此代码,因为此代码已经过测试并且运行良好:

    System.IO.StringWriter sw = new System.IO.StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    Response.AddHeader("content-disposition", "attachment; filename=Avukat.xls");
    Response.ClearContent();
    
    Response.AddHeader("content-disposition", attachment);
    
    GridView1.RenderControl(htw);
    Response.Write(sw.ToString());
    Response.Flush();
    Response.End();
    

    【讨论】:

    • 这行显示错误 Response.AddHeader("content-disposition", attachment);
    • " 类型为 'GridView' 的控件 'ctl00_ContentPlaceHolder1_GridView1' 必须放在带有 runat=server 的表单标签内" 我明白了这个错误。
    • @lucky 耆那教;我已经更新了答案,你现在可以试试,我相信你的问题现在会解决的。
    【解决方案2】:

    你错过了这部分:

    HtmlForm _HtmlForm= new HtmlForm();
    GridView1.Parent.Controls.Add(_HtmlForm);
    _HtmlForm.Attributes["runat"] = "server";
    _HtmlForm.Controls.Add(GridView1);
    _HtmlForm.RenderControl(htmlWrite);
    

    我的意思是你应该使用这行代码:

    _HtmlForm.RenderControl(htmlWrite);
    

    代替:

    GridView1.RenderControl(htmlWrite); 
    

    但我认为使用这个免费的开源组件会更好,它可以从/导出到不同的 excel 和 word 格式:http://npoi.codeplex.com/

    【讨论】:

      【解决方案3】:

      你只需要复制下面的代码。

      public override void VerifyRenderingInServerForm(Control control)
          {
      
              // Confirms that an HtmlForm control is rendered for the
              specified ASP.NET server control at run time.
      
          }
      

      【讨论】:

      • 这个函数里面写了什么我不明白请给我建议
      • @lucky jain:不要编写任何代码,只需将此代码放在您的 .cs 页面上即可。希望对您有所帮助。
      • 谢谢你,我明白了,我必须在页眉中写一个语句“EnableEventValidation="false"”
      【解决方案4】:
      System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
      
      this.gvTask.RenderBeginTag(htmlWrite);
      this.gvTask.HeaderRow.RenderControl(htmlWrite);
      foreach (GridViewRow row in this.gvTask.Rows)
      {
          row.RenderControl(htmlWrite);
      }
      this.gvTask.FooterRow.RenderControl(htmlWrite);
      this.gvTask.RenderEndTag(htmlWrite); 
      

      【讨论】:

        【解决方案5】:
        //**how gridview data download in excel in asp.net**
        
        protected void btnDownload_Click(object sender, EventArgs e)
        {
            CommonFunction objComm = new CommonFunction();
            Hashtable objHash = new Hashtable();
            //Hashtable htParam = new Hashtable();
            objHash.Clear();
            string str = ddlMonthlyYrs.SelectedItem.Text.ToString();
            if (str == "Select")
            {
                objHash.Add("@Cmonth", "");
            }
            else
            {
                objHash.Add("@Cmonth", str.Substring(0, 6));
            }
            if (ddlPaymentTerm.SelectedItem.Text == "Select")
            {
                objHash.Add("@PaymentTerm", "");
            }
            else
            {
                objHash.Add("@PaymentTerm", ddlPaymentTerm.SelectedValue.ToString());
            }
            if (ddlPayMode.SelectedItem.Text == "Select")
            {
                objHash.Add("@PaymentMode", "");
            }
            else
            {
                objHash.Add("@PaymentMode", ddlPayMode.SelectedValue);
            }
        
            objHash.Add("@PolicyNo", txtPolicyNo.Text);
        
            objHash.Add("@AgentCode", txtAgnCode.Text);
            objHash.Add("@AgentName", txtAgnName.Text);
        
            DataSet objDS = objComm.GetDataSetForPrcDBConn("Prc_GetIncBasedataRp", objHash, "Commssion");
        
            BasicComm.CommonFunction objCom = new BasicComm.CommonFunction();
            Response.Clear();
            //Response.Charset=”";
            Response.ContentType = "application/vnd.ms-excel";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
            System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();
            dg.DataSource = objDS.Tables[0];
            dg.DataBind();
            dg.RenderControl(htmlWrite);
            Response.Write(stringWrite.ToString());
            Response.End();
        }
        

        【讨论】:

        • 嗨 pradeep,欢迎来到 Stackoverflow。但是,请考虑正确格式化代码。您可以在编辑器中使用“代码”样式。
        猜你喜欢
        • 1970-01-01
        • 2018-10-08
        • 2022-10-06
        • 1970-01-01
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多