DataTable 更改在有數據列的類型方法+DataTable 導出excel功能

 /// <summary>
    /// 導出功能
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btn_export_Click(object sender, EventArgs e)
    {
        try
        {
            string strSql = CreateStrWhere();
            DataTable dst = ShDonBLL.GetListForEXport(strSql).Tables[0];
            if (dst.Rows.Count<=0)
            {
                Jscript.Alert(this, "查詢數據爲空,沒有數據導出,請從新選擇條件!");
                return;
            }
            DataTable ds = UpdateDataTable(dst);
            for (int i = 0; i < ds.Rows.Count; i++)
            {
                DataColumn dc = ds.Columns[1];//i就是第幾列或者用列名也能夠
                dc.DataType = typeof(String);
                string eid = ds.Rows[i]["裝置名稱"].ToString();
                string tyid = ds.Rows[i]["類別"].ToString();
                if (!string.IsNullOrEmpty(eid))
                {
                    ds.Rows[i]["裝置名稱"] = GetEqui(eid);
                }
                if (!string.IsNullOrEmpty(tyid))
                {
                    ds.Rows[i]["類別"] = GetZG(tyid);
                }
            }
            //DataTableExcel(ds,"測試0","");

        }
        catch (Exception ex)
        {

            throw ex;
        }
    }
    /// <summary>
    /// 修改數據表DataTable某一列的類型和記錄值(正確步驟:1.克隆表結構,2.修改列類型,3.修改記錄值,4.返回但願的結果)
    /// </summary>
    /// <param name="argDataTable">數據表DataTable</param>
    /// <returns>數據表DataTable</returns>  

    private DataTable UpdateDataTable(DataTable argDataTable)
    {
        DataTable dtResult = new DataTable();
        //克隆表結構
        dtResult = argDataTable.Clone();
        foreach (DataColumn col in dtResult.Columns)
        {
            if (col.ColumnName == "裝置名稱" || col.ColumnName == "類別")
            {
                //修改列類型
                col.DataType = typeof(String);
            }
        }
        foreach (DataRow row in argDataTable.Rows)
        {
            DataRow rowNew = dtResult.NewRow();
            rowNew["序號"] = row["序號"];
            rowNew["裝置名稱"] = row["裝置名稱"];
            rowNew["停工時間"] = row["停工時間"];
            rowNew["開工時間"] = row["開工時間"];
            rowNew["正常時間"] = row["正常時間"];
            rowNew["停工緣由"] = row["停工緣由"];
            rowNew["類別"] = row["類別"];
            rowNew["停工時間小時"] = row["停工時間小時"];
            rowNew["年度"] = row["年度"];
            dtResult.Rows.Add(rowNew);
        }
        return dtResult;
    }

    #region  DataTable導出到Excel
    /// <summary>
    /// DataTable導出到Excel
    /// </summary>
    /// <param name="pData">DataTable</param>
    /// <param name="pFileName">導出文件名</param>
    /// <param name="pHeader">導出標題以|分割</param>
    public static void DataTableExcel(System.Data.DataTable pData, string pFileName, string pHeader)
    {
        System.Web.UI.WebControls.DataGrid dgExport = null;
        // 當前對話 
        System.Web.HttpContext curContext = System.Web.HttpContext.Current;
        // IO用於導出並返回excel文件 
        System.IO.StringWriter strWriter = null;
        System.Web.UI.HtmlTextWriter htmlWriter = null;
        if (pData != null)
        {
            string UserAgent = curContext.Request.ServerVariables["http_user_agent"].ToLower();
            if (UserAgent.IndexOf("firefox") == -1)//火狐瀏覽器
                pFileName = HttpUtility.UrlEncode(pFileName, System.Text.Encoding.UTF8);
            curContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + pFileName + ".xls");
            curContext.Response.ContentType = "application/vnd.ms-excel";
            strWriter = new System.IO.StringWriter();
            htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
            // 爲了解決dgData中可能進行了分頁的狀況,須要從新定義一個無分頁的DataGrid 
            dgExport = new System.Web.UI.WebControls.DataGrid();
            dgExport.DataSource = pData.DefaultView;
            dgExport.AllowPaging = false;
            dgExport.ShowHeader = true;//顯示標題
            dgExport.DataBind();
            string[] arrHeader = pHeader.Split('|');
            string strHeader = "<table border=\"1\" style=\"background-color:Gray;font-weight:bold;\"><tr>";
            foreach (string j in arrHeader)
            {
                strHeader += "<td>" + j.ToString() + "</td>";
            }
            strHeader += "</tr></table>";
            // 返回客戶端 
            dgExport.RenderControl(htmlWriter);
            string strMeta = "<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=UTF-8\"/>";
            curContext.Response.Write(strMeta + strHeader + strWriter.ToString());
            curContext.Response.End();
        }
    }
相關文章
相關標籤/搜索