首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> XML教程
ASP.NET 2.0中将 GridView 导出到 Excel 文件中-.NET教程,数据库应用
作者:网友供稿 点击:384
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

下面代码实现将 gridview 导出到 excel文件中。

值得注意的是verifyrenderinginserverform重载方法:
  msdn上的 verifyrenderinginserverform 方法的描述:
  必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 control.render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。
  如果回发或使用客户端脚本的服务器控件没有包含在 htmlform 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 htmlform 控件中时提供明确的错误信息。
  开发自定义服务器控件时,通常在为任何类型的输入标记重写 render 方法时调用该方法。这在输入控件调用 getpostbackeventreference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。

没有这个方法,程序将报错。

c# 代码

<%@ page language="c#" enableeventvalidation="false" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
 "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
>

<script runat="server">
  icollection createdatasource( )
  
{
    system.data.datatable dt 
= new system.data.datatable();
    system.data.datarow dr;
    dt.columns.add(
new system.data.datacolumn("id"typeof(int32)));
    dt.columns.add(
new system.data.datacolumn("pkid"typeof(string)));
    dt.columns.add(
new system.data.datacolumn("title"typeof(string)));
    
for (int i = 0; i < 6; i++)
    
{
      dr 
= dt.newrow();
      dr[
0= i;
      dr[
1= "123456789123456789123456789";
      dr[
2= "<a href=http://dotnet.aspx.cc/>欢迎光临【孟宪会之精彩世界】</a>";
      dt.rows.add(dr);
    }

    system.data.dataview dv 
= new system.data.dataview(dt);
    
return dv;
  }


  protected 
void page_load( object sender, eventargs e )
  
{
    
if (!ispostback)
    
{
      gridview1.borderwidth 
= unit.pixel(2);
      gridview1.bordercolor 
= system.drawing.color.darkorange;
      gridview1.datasource 
= createdatasource();
      gridview1.databind();
    }

  }


  protected 
void button1_click( object sender, system.eventargs e )
  
{
    response.clear();
    response.buffer 
= true;
    response.charset 
= "gb2312";
    response.appendheader(
"content-disposition""attachment;filename=filename.xls");
    
// 如果设置为 getencoding("gb2312");导出的文件将会出现乱码!!!
    response.contentencoding = system.text.encoding.utf7;
    response.contenttype 
= "application/ms-excel";//设置输出文件类型为excel文件。 
    system.io.stringwriter ostringwriter = new system.io.stringwriter();
    system.web.ui.htmltextwriter ohtmltextwriter 
= new system.web.ui.htmltextwriter(ostringwriter);
    
this.gridview1.rendercontrol(ohtmltextwriter);
    response.output.write(ostringwriter.tostring());
    response.flush();
    response.end();

  }

  public override 
void verifyrenderinginserverform( control control )
  
{ }
  protected 
void gridview1_rowdatabound( object sender, gridviewroweventargs e )
  
{
    
if (e.row.rowtype == datacontrolrowtype.datarow)
    
{
      e.row.cells[
1].attributes.add("style""vnd.ms-excel.numberformat:@;");
    }

  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  
<title>将 gridview 导出到 excel 文件中</title>
</head>
<body>
  
<form id="form1" runat="server">
    
<asp:gridview id="gridview1" runat="server" onrowdatabound="gridview1_rowdatabound"
      autogeneratecolumns
="false">
      
<columns>
        
<asp:boundfield headertext="序号" datafield="id" />
        
<asp:boundfield headertext="身份证号" datafield="pkid" />
        
<asp:boundfield headertext="网址" datafield="title" readonly="true" htmlencode="false" />
      
</columns>
    
</asp:gridview>
    
<asp:literal id="hiddenout" runat="server" />
    
<asp:button id="button1" runat="server" text="导出" onclick="button1_click" />
  
</form>
</body>
</html>


vb.net 代码

<%@ page language="vb" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
 "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
>

<script runat="server">
function createdatasource() as icollection 
 dim dt as system.data.datatable 
= new system.data.datatable 
 dim dr as system.data.datarow 
 dt.columns.add(new system.data.datacolumn(
"id", gettype(int32))) 
 dt.columns.add(new system.data.datacolumn(
"pkid", gettype(string))) 
 dt.columns.add(new system.data.datacolumn(
"title", gettype(string))) 
 dim i as integer 
= 0 
 while i 
< 6 
   dr 
= dt.newrow 
   dr(
0= i 
   dr(
1= "123456789123456789123456789" 
   dr(
2= "<a href=http://dotnet.aspx.cc/>欢迎光临【孟宪会之精彩世界】</a>" 
   dt.rows.add(dr) 
   system.math.min(system.threading.interlocked.increment(i),i
-1
 end while 
 dim dv as system.data.dataview 
= new system.data.dataview(dt) 
 return dv 
end function 

protected sub page_load(byval sender as object, byval e as eventargs) 
 if not ispostback then 
   gridview1.borderwidth 
= unit.pixel(2
   gridview1.bordercolor 
= system.drawing.color.darkorange 
   gridview1.datasource 
= createdatasource 
   gridview1.databind 
 end if 
end sub 

protected sub button1_click(byval sender as object, byval e as system.eventargs) 
 response.clear 
 response.buffer 
= true 
 response.charset 
= "gb2312" 
 response.appendheader(
"content-disposition""attachment;filename=filename.xls"
 response.contentencoding 
= system.text.encoding.utf7 
 response.contenttype 
= "application/ms-excel" 
 dim ostringwriter as system.io.stringwriter 
= new system.io.stringwriter 
 dim ohtmltextwriter as system.web.ui.htmltextwriter 
= new system.web.ui.htmltextwriter(ostringwriter) 
 me.gridview1.rendercontrol(ohtmltextwriter) 
 response.output.write(ostringwriter.tostring) 
 response.flush 
 response.end 
end sub 

public overloads overrides sub verifyrenderinginserverform(byval control as control) 
end sub 

protected sub gridview1_rowdatabound(byval sender as object, byval e as gridviewroweventargs) 
 if e.row.rowtype 
= datacontrolrowtype.datarow then 
   e.row.cells(
1).attributes.add("style""vnd.ms-excel.numberformat:@;"
 end if 
end sub

</script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head id="head1" runat="server">
  
<title>将 gridview 导出到 excel 文件中</title>
</head>
<body>
  
<form id="form1" runat="server">
    
<asp:gridview id="gridview1" runat="server" onrowdatabound="gridview1_rowdatabound"
      autogeneratecolumns
="false">
      
<columns>
        
<asp:boundfield headertext="序号" datafield="id" />
        
<asp:boundfield headertext="身份证号" datafield="pkid" />
        
<asp:boundfield headertext="网址" datafield="title" readonly="true" htmlencode="false" />
      
</columns>
    
</asp:gridview>
    
<asp:literal id="hiddenout" runat="server" />
    
<asp:button id="button1" runat="server" text="导出" onclick="button1_click" />
  
</form>
</body>
</html>

下面代码实现将 gridview 导出到 excel文件中。

值得注意的是verifyrenderinginserverform重载方法:
  msdn上的 verifyrenderinginserverform 方法的描述:
  必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 control.render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。
  如果回发或使用客户端脚本的服务器控件没有包含在 htmlform 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 htmlform 控件中时提供明确的错误信息。
  开发自定义服务器控件时,通常在为任何类型的输入标记重写 render 方法时调用该方法。这在输入控件调用 getpostbackeventreference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。

没有这个方法,程序将报错。

c# 代码

<%@ page language="c#" enableeventvalidation="false" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
 "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
>

<script runat="server">
  icollection createdatasource( )
  
{
    system.data.datatable dt 
= new system.data.datatable();
    system.data.datarow dr;
    dt.columns.add(
new system.data.datacolumn("id"typeof(int32)));
    dt.columns.add(
new system.data.datacolumn("pkid"typeof(string)));
    dt.columns.add(
new system.data.datacolumn("title"typeof(string)));
    
for (int i = 0; i < 6; i++)
    
{
      dr 
= dt.newrow();
      dr[
0= i;
      dr[
1= "123456789123456789123456789";
      dr[
2= "<a href=http://dotnet.aspx.cc/>欢迎光临【孟宪会之精彩世界】</a>";
      dt.rows.add(dr);
    }

    system.data.dataview dv 
= new system.data.dataview(dt);
    
return dv;
  }


  protected 
void page_load( object sender, eventargs e )
  
{
    
if (!ispostback)
    
{
      gridview1.borderwidth 
= unit.pixel(2);
      gridview1.bordercolor 
= system.drawing.color.darkorange;
      gridview1.datasource 
= createdatasource();
      gridview1.databind();
    }

  }


  protected 
void button1_click( object sender, system.eventargs e )
  
{
    response.clear();
    response.buffer 
= true;
    response.charset 
= "gb2312";
    response.appendheader(
"content-disposition""attachment;filename=filename.xls");
    
// 如果设置为 getencoding("gb2312");导出的文件将会出现乱码!!!
    response.contentencoding = system.text.encoding.utf7;
    response.contenttype 
= "application/ms-excel";//设置输出文件类型为excel文件。 
    system.io.stringwriter ostringwriter = new system.io.stringwriter();
    system.web.ui.htmltextwriter ohtmltextwriter 
= new system.web.ui.htmltextwriter(ostringwriter);
    
this.gridview1.rendercontrol(ohtmltextwriter);
    response.output.write(ostringwriter.tostring());
    response.flush();
    response.end();

  }

  public override 
void verifyrenderinginserverform( control control )
  
{ }
  protected 
void gridview1_rowdatabound( object sender, gridviewroweventargs e )
  
{
    
if (e.row.rowtype == datacontrolrowtype.datarow)
    
{
      e.row.cells[
1].attributes.add("style""vnd.ms-excel.numberformat:@;");
    }

  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  
<title>将 gridview 导出到 excel 文件中</title>
</head>
<body>
  
<form id="form1" runat="server">
    
<asp:gridview id="gridview1" runat="server" onrowdatabound="gridview1_rowdatabound"
      autogeneratecolumns
="false">
      
<columns>
        
<asp:boundfield headertext="序号" datafield="id" />
        
<asp:boundfield headertext="身份证号" datafield="pkid" />
        
<asp:boundfield headertext="网址" datafield="title" readonly="true" htmlencode="false" />
      
</columns>
    
</asp:gridview>
    
<asp:literal id="hiddenout" runat="server" />
    
<asp:button id="button1" runat="server" text="导出" onclick="button1_click" />
  
</form>
</body>
</html>


vb.net 代码

<%@ page language="vb" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
 "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
>

<script runat="server">
function createdatasource() as icollection 
 dim dt as system.data.datatable 
= new system.data.datatable 
 dim dr as system.data.datarow 
 dt.columns.add(new system.data.datacolumn(
"id", gettype(int32))) 
 dt.columns.add(new system.data.datacolumn(
"pkid", gettype(string))) 
 dt.columns.add(new system.data.datacolumn(
"title", gettype(string))) 
 dim i as integer 
= 0 
 while i 
< 6 
   dr 
= dt.newrow 
   dr(
0= i 
   dr(
1= "123456789123456789123456789" 
   dr(
2= "<a href=http://dotnet.aspx.cc/>欢迎光临【孟宪会之精彩世界】</a>" 
   dt.rows.add(dr) 
   system.math.min(system.threading.interlocked.increment(i),i
-1
 end while 
 dim dv as system.data.dataview 
= new system.data.dataview(dt) 
 return dv 
end function 

protected sub page_load(byval sender as object, byval e as eventargs) 
 if not ispostback then 
   gridview1.borderwidth 
= unit.pixel(2
   gridview1.bordercolor 
= system.drawing.color.darkorange 
   gridview