Gridview 分多頁時匯出excel的解決方案

來源:互聯網
上載者:User
Gridview 分多頁時匯出excel的解決方案

在開發會遇到將gridview中的資料匯入到excel
這樣的需求,當girdview有多頁資料時按照一般的方式匯出的資料只可能是當前頁的資料,後幾頁的資料還在資料庫內,沒有呈現到頁面上,傳統的方式是
將標記字元和文本寫入到 ASP.NET
伺服器控制項輸出資料流,沒有呈現的頁面不可能輸出到excel中。下面提供一種解決方式將所以資料都能匯入到excel中。

第一步:記錄查詢條件,當使用者點擊下載的時候以相同的條件查詢,呈現到datatable

這一步沒有固定的代碼,可以在使用者查詢的時候用ViewState記錄查詢條件,例如

OrderMng.OrderList_GetSupOrderList_BindData( Param, fDynamicParam, PageParamByCus, dystr);(查詢出單頁的資料繫結到girdview)
 ViewState["GParam"]
= Param; ViewState["DPaRam"] = fDynamicParam; ViewState["PageParam"] =
PageParamByCus; ViewState["strparam"] = dystr;(記錄查詢條件)

使用者點下載的時候再以相同的條件,查詢出所有資料到datatable

   Hashtable GParam = (Hashtable)ViewState["GParam"];
   Hashtable DPaRam = (Hashtable)ViewState["DPaRam"]; 
   Hashtable PageParam= (Hashtable)ViewState["PageParam"];
   string strparam=ViewState["strparam"].ToString();

  是將開始查詢的條件轉化回來
    DataTable  dt = OrderMng.OrderList_GetSupOrderList(GParam, DPaRam, PageParam, strparam);

  相同的條件查詢後到datatable

  第二步:處理datatable , 修改列名,排序,修改顯示的內容

代碼

 1  protected void DataTableTranfer(DataTable dt)
2 {
3 DataColumn dc = null;
4 dt.Columns.Add("類型", Type.GetType("System.String"));
5 dt.Columns.Add("商品名稱", Type.GetType("System.String"));
6 dt.Columns.Add("結算狀態", Type.GetType("System.String"));
7 foreach (DataRow row in dt.Rows)
8 {
9 if (row["isSecret"].ToString() == "0")
10 {
11 row["類型"] = " 網路訂單";
12 }
13 else
14 {
15 row["類型"] = "手工訂單";
16 }
17 }
18 row["商品名稱"] = "ID[:" + row["ProductID"] + "]" + row["ProductName"];
19 //IsCheckOutk是頁面上判斷的方法
20   row["結算狀態"] = IsCheckOut(row["CheckOutID"], row["isrepeal"]);
21
22
23 //修改列名
24   dt.Columns["OrderID"].ColumnName = "訂單號";
25 dt.Columns["BuyTime"].ColumnName = "交易日期";
26 dt.Columns["BuyCount"].ColumnName = "我的銷售數量";
27 //排序列
28 dt.Columns["訂單號"].SetOrdinal(0);
29 dt.Columns["類型"].SetOrdinal(1);
30 dt.Columns["交易日期"].SetOrdinal(2);
31 //移除列
32 dt.Columns.Remove(dt.Columns["totalsize"]);
33 dt.Columns.Remove(dt.Columns["rownum"]);
34
35 }

 第三步:將datatable轉化成excel

代碼

    public static void TableToExcel(DataTable tb,string fileName)
{
string Filename = fileName;
System.Web.HttpContext context = System.Web.HttpContext.Current;
if ((tb != null))
{
context.Response.Clear();
context.Response.Charset = "GB2312";
context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
context.Response.ContentType = "application/ms-excel";
context.Response.AppendHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(Filename, System.Text.Encoding.GetEncoding("GB2312")) +DateTime.Now.ToString("yyyyMMdd")+ ".xls\"");

CultureInfo cult = new CultureInfo("zh-CN", true);
StringWriter sw = new StringWriter(cult);
HtmlTextWriter htw = new HtmlTextWriter(sw);
DataGrid dgrid = new DataGrid();
dgrid.DataSource = tb.DefaultView;
dgrid.AllowPaging = false;
dgrid.DataBind();
htw.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=GB2312\">");
dgrid.RenderControl(htw);
context.Response.Write(sw.ToString());
context.Response.End();
}
}

自此完成操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.