protected void Button2_Click(object sender, EventArgs e)
    {
        GridViewToExcel();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        // Confirms that an HtmlForm control is rendered for
    }
    private void GridViewToExcel()
    {
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "GB2312";
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
        Response.ContentEncoding = System.Text.Encoding.UTF7;
        Response.ContentType = "application/ms-excel";
        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
        gvMenus.RenderControl(oHtmlTextWriter);
        //gvDishes.RenderControl(oHtmlTextWriter);
        //gvExtrol.RenderControl(oHtmlTextWriter);
        Response.Output.Write(oStringWriter.ToString());
        Response.Flush();
        Response.End();
    }
菜编号  菜名(中文)  操作
这样做后  我导出的EXCEL包括操作(删除,编辑)  如何能把操作去掉  只留下查询出来的数据 谢谢
有比较完整的代码更好 

解决方案 »

  1.   

      /// <summary>
        /// GridView导出到Excel
        /// </summary>
        /// <param name="exportTargetGridView">目标GridView</param>
        /// <param name="filename">文件名称</param>
        public static void ExportExcel(GridView exportTargetGridView, string filename)
        {
            HttpContext.Current.Response.ClearContent();        HttpContext.Current.Response.Charset = "GB2312";        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF7;        HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlPathEncode(filename + ".xls"));        HttpContext.Current.Response.ContentType = "application/excel";        StringWriter sw = new StringWriter();        HtmlTextWriter htw = new HtmlTextWriter(sw);        PrepareGridViewForExport(exportTargetGridView);//调用模式化特殊元素         exportTargetGridView.RenderControl(htw);        HttpContext.Current.Response.Write(sw.ToString());        HttpContext.Current.Response.End();
        }
        /// <summary>
        /// 使用GridView导出excel表格,对特殊的控件进行模式化处理 
        /// </summary>
        /// <param name="gv">模式化特殊元素的函数 </param>
        public static void PrepareGridViewForExport(Control gv)
        {        HyperLink lb = new HyperLink();
            LinkButton bt = new LinkButton();
            Literal l = new Literal();
            string name = String.Empty;
            RadioButton rb = new RadioButton();        for (int i = 0; i < gv.Controls.Count; i++)
            {
                if (gv.Controls[i].GetType() == typeof(HyperLink))
                {
                    l.Text = (gv.Controls[i] as HyperLink).Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);            }
                else if (gv.Controls[i].GetType() == typeof(LinkButton))//替换
                {                l.Text = (gv.Controls[i] as LinkButton).Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);            }
                else if (gv.Controls[i].GetType() == typeof(DropDownList))
                {                DropDownList dl = gv.Controls[i] as DropDownList;
                    for (int j = 0; j < dl.Items.Count; j++)
                    {
                        rb.Text = dl.Items[j].Text;
                        if (rb.Text == dl.SelectedItem.Text)
                            rb.Checked = true;
                        gv.Controls.AddAt(i, rb);
                    }
                    gv.Controls.Remove(dl); //移除DropDownlist             }
                else if (gv.Controls[i].GetType() == typeof(CheckBox))
                {                l.Text = (gv.Controls[i] as CheckBox).Checked ? "" : "";
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);            }
                else if (gv.Controls[i].GetType() == typeof(ImageButton))
                {
                    l.Text = "图片";
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);
                }
                if (gv.Controls[i].HasControls())
                {
                    PrepareGridViewForExport(gv.Controls[i]);
                }        }    }
      

  2.   

    笨办法就是你可以把要导出的数据放入到datatable中,然后再导出到excel中就可以了。
      

  3.   

    只要能导出到Excel中。那样的话办法也就解决了。你导出来之前不就是grdview数据源的数据吗??这样的话你换过角度。不从grdview导出。在点导出的时刻重新生成数据源。就可以了啊。也就是楼上说的那样重新生成datatable。只不过这样性能可能差点。
      

  4.   

    在Response.Output.Write(oStringWriter.ToString()); 
    上面添加
    oStringWriter.Replace("删除", "").Replace("编辑", ""); 
    linkbutton可以换成span.
    在至于那一列,不太好去。
    当然想去掉你也可以用string.Remove(),用IndexOf()算好长度和位置。
      

  5.   

    获取绑定gridview的数据集,再打开excel模板导出到excel或 
    隐藏列再显示
    protected void Btn(object sender, EventArgs e)
    {
    string style = @"<style> .text { mso-number-format:\@; } </script> "; 
    Response.ClearContent();
    Response.AddHeader("content-disposition", "attachment; filename=ExcelFile.xls");
    Response.ContentType = "application/excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    gv.RenderControl(htw);
    Response.Write(style); 
    Response.Write(sw.ToString());
    Response.End();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {}
      

  6.   

            GridView1.Columns[GridView1.Columns.Count - 1].Visible = false;
    绝对好用.这样导出的时候就不导出对后一列了..