GridView导出EXCEL文件实例

 

 1public static void GridViewToExcel(GridView gv, Page page)
 2    {
 3        page.Response.Clear();
 4        page.Response.Buffer = true;
 5        page.Response.Charset = "GB2312";
 6        string str = "生成的电子表格.xls";
 7        page.Response.AppendHeader("Content-Disposition""attachment;filename=" + HttpUtility.UrlEncode(str, Encoding.UTF8));
 8        page.Response.ContentEncoding = Encoding.GetEncoding("GB2312");
 9        page.Response.ContentType = "application/ms-excel";
10        page.EnableViewState = false;
11        CultureInfo formatProvider = new CultureInfo("ZH-CN"true);
12        StringWriter writer = new StringWriter(formatProvider);
13        HtmlTextWriter writer2 = new HtmlTextWriter(writer);
14    
15        gv.RenderControl(writer2);
16        page.Response.Write(writer.ToString());
17        page.Response.End();
18        gv.AllowPaging = true;
19        gv.DataBind();
20    }

21
如果GridView存在模板列,其中包含子控件,例如CheckBox等,导出EXCEL后就会出现该区域的不规律。所以要对模板列单独处理(转载)
 public static void PrepareGridViewForExport(Control gv)//模式化特殊元素 flashcong
    {

        LinkButton lb 
= new LinkButton();
        Literal l 
= new Literal();
        
string name = String.Empty;

        
for (int i = 0; i < gv.Controls.Count; i++)
        
{

            
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))
            
{

                l.Text 
= (gv.Controls[i] as DropDownList).SelectedItem.Text;
                gv.Controls.Remove(gv.Controls[i]);
                gv.Controls.AddAt(i, l);

            }


            
else if (gv.Controls[i].GetType() == typeof(CheckBox))
            
{

               l.Text 
= (gv.Controls[i] as CheckBox).Checked ? "True" : "False";
               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]);
            }


        }


    }
对以上特殊元素,可以替换成目标代码输出即可。
posted on 2008-04-16 17:19  西湖浪子  阅读(205)  评论(0)    收藏  举报