coolite 中GridPanel 导出excel

来源:互联网 发布:免备案php香港免费空间 编辑:程序博客网 时间:2024/04/30 00:29

官方只能导出当前页的数据, 而且表头都不能自定义。

 

现在的这个完全可以了。

 


    #region 导出EXCEL
    public void ToExcel(GridPanel gp, string fileName, DataTable dt, HttpResponse resp)
    {

      

        resp.Clear();
        resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
        resp.ContentType = "application nd.ms-excel";

        string colHeaders = "", ls_item = "";
        int i = 0;
        int cl = gp.ColumnModel.Columns.Count;
        string columns = "";

        //输出表头
        //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
        for (i = 0; i < cl; i++)
        {
            if (i == (cl - 1))//最后一列,加n
            {
                if (!gp.ColumnModel.Columns[i].Hidden)
                {
                    colHeaders += gp.ColumnModel.Columns[i].Header;
                    columns += gp.ColumnModel.Columns[i].DataIndex + ",";
                }
                colHeaders += "/n";
            }
            else
            {
                if (!gp.ColumnModel.Columns[i].Hidden && gp.ColumnModel.Columns[i].ColumnID != "update")
                {
                    colHeaders += gp.ColumnModel.Columns[i].Header + "/t";
                    columns += gp.ColumnModel.Columns[i].DataIndex + ",";
                }
            }
        }
        resp.Write(colHeaders);

        if (columns != "") columns = columns.Substring(0, columns.LastIndexOf(","));
        string[] columnall = columns.Split(',');

        cl = columnall.Length;

        //逐行处理数据  
        for (int j = 0; j < dt.Rows.Count; j++)
        {
            //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据    
            for (i = 0; i < cl; i++)
            {
                if (i == (cl - 1))
                {
                    ls_item += EditString(dt.Rows[j][columnall[i].ToString()].ToString()) + "/n";
                }
                else
                {
                    ls_item += EditString(dt.Rows[j][columnall[i].ToString()].ToString()) + "/t";
                }
            }
            resp.Write(ls_item);
            ls_item = "";
        }
        Response.Flush();
        resp.End();
    }
    private static string EditString(string text1)//处理字符问题
    {
        if (text1.IndexOf('/r') != -1)
        {
            text1 = text1.Replace('/r', ' ');
        }
        if (text1.IndexOf('/n') != -1)
        {
            text1 = text1.Replace('/n', ' ');
        }
        if (text1.IndexOf('/t') != -1)
        {
            text1 = text1.Replace('/t', ' ');
        }
        if (text1.IndexOf("'") != -1)
        {
            text1 = text1.Replace("'", "");
        }

        if (text1.IndexOf(@"""") != -1)
        {
            text1 = text1.Replace(@"""", "");
        }
        return text1;
    }
    #endregion

 

还要注意一点就是

                          <ext:Button ID="btnExport" runat="server" Text="导出" Icon="PageExcel" AutoPostBack="true"
                                                    OnClick="ToExcels">
                                                </ext:Button>
                这个要AutoPostBack    ajax的方法会报错的!

 

调用的时候: ToExcel(GridPanel2, "date", dt, this.Response);

 

source: http://hi.baidu.com/helinhai30/blog/item/5575b963c5912ed6e6113a0c.html

原创粉丝点击