gridview 表头固定并实现打印excel

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

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

在我们把GridView上的数据导入到Excel的时候,如果遇到比较长的数字字符串,比如身份证号码,就会在Excel里当成数字看待,并转换成科学计数法的格式,造成数据的丢失,下面这个方法就解决了这个问题,并示例如何进行其它的格式化。


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Modules_test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>无标题页</title>
    
<style type="text/css">
.Freezing
   
{
   
   position
:relative ;
   table-layout
:fixed;
   top
:expression(this.offsetParent.scrollTop);
   z-index
: 10;
   
}
 

.Freezing th
{text-overflow:ellipsis;overflow:hidden;white-space: nowrap;padding:2px;}
</style>
</head>
<body>
    
<form id="form1" runat="server">
        
<div runat="server" style="overflow-y: scroll; height: 200px; width: 300px">
            
<asp:GridView ID="GridView1" runat="server" CellPadding="3"
                 BackColor
="White" BorderColor="#CCCCCC"
                BorderStyle
="None" BorderWidth="1px" Font-Size="12px" OnRowDataBound="GridView1_RowDataBound" >
                
<FooterStyle BackColor="White" ForeColor="#000066" />
                
<RowStyle ForeColor="#000066" />
                
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
                
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
                
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" CssClass="Freezing" />
            
</asp:GridView>
        
</div>
        
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    
</form>
</body>
</html>

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Modules_test : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
if (!IsPostBack)
        
{
            
//GridView1.Attributes.Add("style", "table-layout:fixed");
            GridView1.BorderWidth = Unit.Pixel(2);
            GridView1.BorderColor 
= System.Drawing.Color.DarkOrange;

            GridView1.DataSource 
= CreateDataSource();
            GridView1.DataBind();
        }

    }


    ICollection CreateDataSource()
    
{
       DataTable dt = new DataTable();
        DataRow dr;
        dt.Columns.Add(new DataColumn("身份证号码", typeof(string)));
        dt.Columns.Add(new DataColumn("图书单价",typeof(decimal)));
        dt.Columns.Add(new DataColumn("购买数量",typeof(Int32)));
        dt.Columns.Add(new DataColumn("总价格",typeof(decimal)));


        for (int i = 0; i < 30; i++) 
        {
        dr = dt.NewRow();

        dr[0] = "123456789123456789";
        dr[1] = 100 * i /3.0;
        dr[2] = i + 5;
        dr[3] = (decimal)dr[1] * (Int32)dr[2]; 
        dt.Rows.Add(dr);
        }
        DataView dv = new DataView(dt);
        return dv;

    }



    
protected void Button1_Click(object sender, 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();
         //this.EnableViewState = false;    
         //System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
         //System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);

        System.Web.UI.HtmlTextWriter oHtmlTextWriter 
= new System.Web.UI.HtmlTextWriter(oStringWriter);
        
this.GridView1.RenderControl(oHtmlTextWriter);
        Response.Output.Write(oStringWriter.ToString());
        Response.Flush();
        Response.End();

    }

    
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    
{
        
if (e.Row.RowType == DataControlRowType.DataRow)
        
{
            
e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@");
             e.Item.Cells[3].Attributes.Add("style","vnd.ms-excel.numberformat:¥#,###.00");

        }

    }


    
public override void VerifyRenderingInServerForm(Control control)
    
{ }
}

 

posted on 2007-11-26 20:47  执法长老  阅读(1588)  评论(2编辑  收藏  举报

导航