怎么把gridview里的数据导出来呢 要Excel格式的。希望能是一个公用的方法  因为有很多地方需要调用这个烦方法。

解决方案 »

  1.   


      /// <summary>
            /// 导出Excel
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void btnExcel_Click(object sender, EventArgs e)
            {
                Response.Clear();
                System.Web.HttpContext curContext = System.Web.HttpContext.Current;
                Response.AddHeader("content-disposition",
                "attachment;filename=instimestock.xls");
                Response.Charset = "utf-8";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
                Response.ContentType = "application/vnd.xls";
                System.IO.StringWriter stringWrite = new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
                //写到Excel的数据不用分页
                //BindData();
                gridviewName.RenderControl(htmlWrite);
                Response.Write(stringWrite.ToString());//向客户端写数据
                Response.End();
    } //这个方法不写的话可能报错类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。
        public override void VerifyRenderingInServerForm(Control control)
        {
            // Confirms that an HtmlForm control is rendered for
        }
      

  2.   


    要不要给你发demo?? 我都是这样用的。
      

  3.   

    这个满足你的需求  private void CreateExcel(DataTable dt, string fileName)
        {        HttpResponse resp;
            resp = Page.Response;
            resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
            string colHeaders = "", ls_item = "";        ////定义表对象与行对象,同时用DataSet对其值进行初始化 
            //DataTable dt = ds.Tables[0]; 
            DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的 
            //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                if (i == (dt.Columns.Count - 1))//最后一列,加n 
                {
                    colHeaders += dt.Columns[i].Caption.ToString() + "\n";
                }
                else
                {
                    colHeaders += dt.Columns[i].Caption.ToString() + "\t";
                }
            }
            resp.Write(colHeaders);
            //向HTTP输出流中写入取得的数据信息        //逐行处理数据
            foreach (DataRow row in myRow)
            {
                //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    if (i == (dt.Columns.Count - 1))//最后一列,加n 
                    {
                        ls_item += row[i].ToString() + "\n";
                    }
                    else
                    {
                        ls_item += row[i].ToString() + "\t";
                    }            }
                resp.Write(ls_item);
                ls_item = "";        }
            resp.End();
        }
      

  4.   

    /// <summary>
        /// gvFinance是gridview的id
        /// </summary>
        /// <param name="FileName">excel文件名</param>
        private void ExportExcelFromDataGrid(string FileName)
        {
            Response.Charset = "utf-8";
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName).ToString());
            Response.ContentType = "application/ms-excel";
            this.EnableViewState = false;
            StringWriter tw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            this.gvFinance.RenderControl(hw);
            Response.Write(tw.ToString());
            Response.End();
        }
    //如果没有下面方法会报错类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内
        public override void VerifyRenderingInServerForm(Control control)
        {
            //什么都用需要写
        }