主要功能是寫在一個按鈕裏面的,導出Excel文件的方法。
用了自己寫的一類來操作數據庫
注意幾點:
1、在格式化日期類型的時候不得不用笨辦法foreach每個row來設置。。。。
2、public override void VerifyRenderingInServerForm,據說是BUG,必須添加,但是註釋掉一樣的能用這個,所以說是沒用的,哈哈
- #region 導出Excel文件
- // 導出Excel文件
- protected void Button6_Click(object sender, EventArgs e)
- {
- GridView myGridView = new GridView();
- SelectData mySelectData = new SelectData();
- DataTable myDataTable = new DataTable();
- string strSQLOrder;
- string strWhere, strSortExpression, strSortDirection;
- strSortExpression = ViewState["GridView1SortExpression"].ToString();
- strSortDirection = ViewState["GridView1Order"].ToString();
- strWhere = ViewState["GridView1Where"].ToString();
- try
- {
- // 如果有查詢條件
- if (strWhere.Length > 0)
- strSQLOrder = @"SELECT CM_ID, Name, MobileTelephone, Phone, Birthday, Sex, Age, Profession, Expenditure, AddDateTime, MonthIncome, Taste FROM tabCustomerInfo " +
- @" where DeletedTag = False and " + strWhere + @" ORDER BY " + strSortExpression + " " + strSortDirection;
- else
- strSQLOrder = @"SELECT CM_ID, Name, MobileTelephone, Phone, Birthday, Sex, Age, Profession, Expenditure, AddDateTime, MonthIncome, Taste FROM tabCustomerInfo" +
- @" where DeletedTag = False ORDER BY " + strSortExpression + " " + strSortDirection;
- // 用GetTable方法獲取數據
- myDataTable = mySelectData.GetTable(strSQLOrder);
- myDataTable.Columns["CM_ID"].ColumnName = "編號";
- myDataTable.Columns["Name"].ColumnName = "姓名";
- myDataTable.Columns["MobileTelephone"].ColumnName = "移動電話";
- myDataTable.Columns["Phone"].ColumnName = "電話";
- myDataTable.Columns["Birthday"].ColumnName = "出生日期";
- myDataTable.Columns["Sex"].ColumnName = "性別";
- myDataTable.Columns["Age"].ColumnName = "年齡";
- myDataTable.Columns["Profession"].ColumnName = "職業";
- myDataTable.Columns["Expenditure"].ColumnName = "消費金額";
- myDataTable.Columns["AddDateTime"].ColumnName = "編輯時間";
- myDataTable.Columns["MonthIncome"].ColumnName = "月收入";
- myDataTable.Columns["Taste"].ColumnName = "愛好";
- myGridView.DataSource = myDataTable;
- // 綁定數據
- myGridView.DataBind();
- foreach (GridViewRow myGVR in myGridView.Rows)
- {
- myGVR.Cells[4].Text = Convert.ToDateTime((myGVR.Cells[4].Text)).ToString("yyyy-MM-dd");
- myGVR.Cells[9].Text = Convert.ToDateTime((myGVR.Cells[9].Text)).ToString("yyyy-MM-dd");
- }
- }
- catch (System.Exception ex)
- {
- tips.Text = "查詢數據庫時發生錯誤!錯誤信息:" + ex.Message + "<br>可能是因爲數據庫連接出現問題!請聯繫系統管理員!<br>>";
- return;
- }
- Response.Clear();
- Response.Buffer = true;
- Response.Charset = "GB2312";
- Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("客戶資料.xls", System.Text.Encoding.UTF8));
- // 如果設置爲 GetEncoding("GB2312");導出的文件將會出現亂碼!!!
- Response.ContentEncoding = System.Text.Encoding.UTF8;
- 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);
- myGridView.RenderControl(oHtmlTextWriter);
- Response.Output.Write(oStringWriter.ToString());
- Response.Flush();
- Response.End();
- }
- // 導出Excel文件必須要下面這個,據說是vs2005的BUG,日
- public override void VerifyRenderingInServerForm(Control control)
- {
- }
- #endregion
在這個頁的ASPX文件裏面的<%@ Page,必須加上EnableEventValidation="false"
我看網上說要在Web.Config加東西,但是我沒加也能成功。。。
在最後用Response導出成Excel的那一段代碼是抄網上的