自定义分页组件,数据量比较多的时候可以用SQL作为参数
using System; using System.IO; using System.Xml; using System.Text; using System.Data; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Data.SqlClient;[assembly:TagPrefix( " JJ.Web.UI " , " JJ " )] namespace JJ.Web.UI ... { /**//// <summary> /// sqlDataGrid 的摘要说明。 /// </summary> [ToolboxData("<{0}:sqlDataGrid runat=server></{0}:sqlDataGrid>")] public class sqlDataGrid : DataGrid ...{ //所有数据 private DataTable dtDataTable; //当前页数据 private DataTable dtDataView; //翻页数据 private TableInfo tiTableInfo; //保存的文件窗口 private string sSaveWindow; //保存文件的路径 private string sSavePath; //EnableViewState提示信息 private string sViewState = "<font color='##FF0000'>控件属性EnableViewState现在被设置为false,无法实现翻页及导出功能!</font>"; [ Description("获得或者设置是否显示保存按钮"), Category("自定义类别"), Bindable(true), DefaultValue(true) ] public virtual bool IsShowSave ...{ get ...{ object b = (object)ViewState["IsShowSave"]; return (b == null) ? true : (bool)b; } set...{this.ViewState["IsShowSave"] = value;} } [ Description("获得或者设置是否显示合计"), Category("自定义类别"), Bindable(true), DefaultValue(false) ] public virtual bool IsShowSum ...{ get ...{ object b = (object)ViewState["IsShowSum"]; return (b == null) ? false : (bool)b; } set...{this.ViewState["IsShowSum"] = value;} } [ Description("获得或者设置显示合计的字段"), Category("自定义类别"), Bindable(true), DefaultValue("") ] public virtual string SumColumn ...{ get ...{ string s = (string)ViewState["SumColumn"]; return (s == null) ? "" : s; } set...{this.ViewState["SumColumn"] = value;} } [ Description("获得或者设置标题的字段"), Category("自定义类别"), Bindable(true), DefaultValue("") ] public virtual string Title ...{ get ...{ string s = (string)ViewState["Title"]; return (s == null) ? "" : s; } set...{this.ViewState["Title"] = value;} } /**//// <summary> /// 设置或者获取数据库连接字符串 /// </summary> [ Description("获得或者设置数据库连接字符串。"), Category("自定义类别"), Bindable(true), DefaultValue("") ] public string ConnectionString ...{ get ...{ string s = (string)ViewState["ConnectionString"]; return (s == null) ? "" : s; } set ...{ this.ViewState["ConnectionString"] = value; } } /**//// <summary> /// 设置或者获取查询命令 /// </summary> [ Description("获得或者设置查询语句。"), Category("自定义类别"), Bindable(true), DefaultValue("") ] public string CommandText ...{ get ...{ string s = (string)ViewState["CommandText"]; return (s == null) ? "" : s; } set ...{ this.ViewState["CommandText"] = value; } } /**//// <summary> /// 初始化 /// </summary> public sqlDataGrid():base() ...{ this.dtDataTable = new DataTable(); this.dtDataView = new DataTable(); this.sSaveWindow = ""; this.sSavePath = "JJFiles"; } /**//// <summary> /// 退出 /// </summary> public override void Dispose() ...{ if(dtDataTable != null) dtDataTable.Dispose(); if(dtDataView != null) dtDataView.Dispose(); base.Dispose(); } /**//**************************** /// <summary> /// OnInit控件初始化 /// </summary> /// <param name="e"></param> protected override void OnInit(EventArgs e) { base.OnInit(e); } *****************************/ /**//// <summary> /// LoadViewState取缓存信息 /// </summary> /// <param name="savedState"></param> protected override void LoadViewState(object savedState) ...{ base.LoadViewState(savedState); this.tiTableInfo = (TableInfo)this.ViewState["TableInfo"]; } /**//// <summary> /// OnItemCreated /// </summary> /// <param name="e"></param> protected override void OnItemCreated(DataGridItemEventArgs e) ...{ // 为标题定义显示风格 if(e.Item.ItemType == ListItemType.Header) ...{ e.Item.HorizontalAlign = HorizontalAlign.Center; } // 为分页区域添加自定义分页控件 if(e.Item.ItemType == ListItemType.Pager) ...{ e.Item.Cells[0].Controls.Clear(); this.CreatePager(e.Item.Cells[0]); e.Item.BackColor = System.Drawing.Color.AliceBlue; } base.OnItemCreated(e); } /**//// <summary> /// DataBind /// </summary> public override void DataBind() ...{ SqlDataAdapter dsCommand = new SqlDataAdapter(this.CommandText, this.ConnectionString); dsCommand.Fill(this.dtDataTable); //保存页数数据 if(this.tiTableInfo == null) ...{ this.tiTableInfo = new TableInfo(); this.tiTableInfo.AllowPaging = this.AllowPaging; this.tiTableInfo.PageSize = this.PageSize; } this.tiTableInfo.CurrentPageIndex = this.CurrentPageIndex; this.tiTableInfo.RecordCount = this.dtDataTable.Rows.Count; this.tiTableInfo.PageCount = Convert.ToInt32(Math.Ceiling(this.dtDataTable.Rows.Count * 1.0 / this.tiTableInfo.PageSize)); this.ViewState["TableInfo"] = this.tiTableInfo; //默认属性 this.AllowPaging = true; this.ShowHeader = true; this.ShowFooter = false; this.GetCurPageData(); this.DataSource = this.dtDataView; base.DataBind(); } /**//// <summary> /// OnItemDataBound /// </summary> /// <param name="e"></param> protected override void OnItemDataBound(DataGridItemEventArgs e) ...{ base.OnItemDataBound (e); if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) ...{ e.Item.Attributes.Add("onmouseover","this.bgColor='#C1D2EE'"); e.Item.Attributes.Add("onmouseout","this.bgColor='#FFFFFF'"); for(int i = 0; i < e.Item.Cells.Count; i++) ...{ string sDataType = ((System.Data.DataRowView)e.Item.DataItem).Row.ItemArray[i].GetType().FullName; if((sDataType == "System.Int16")||(sDataType == "System.Int32")||(sDataType == "System.Int64")|| (sDataType == "System.UInt16")||(sDataType == "System.UInt32")||(sDataType == "System.UInt64")|| (sDataType == "System.Decimal")||(sDataType == "System.Double")||(sDataType == "System.Single")) ...{ e.Item.Cells[i].HorizontalAlign = HorizontalAlign.Right; } } } } /**//// <summary> /// SaveViewState保存缓存信息 /// </summary> /// <param name="savedState"></param> protected override object SaveViewState() ...{ return base.SaveViewState(); } /**//***************************************** /// <summary> /// 将此控件呈现给指定的输出参数。 /// </summary> /// <param name="output"> 要写出到的 HTML 编写器 </param> protected override void Render(HtmlTextWriter writer) { base.Render(writer); } ********************************************/ /**//// <summary> /// RenderContents /// </summary> /// <param name="writer"></param> protected override void RenderContents(HtmlTextWriter writer) ...{ base.RenderContents(writer); //保存数据时弹出窗口保存文件 if(this.IsShowSave) writer.Write(this.sSaveWindow); //EnableViewState提示信息 if(!this.EnableViewState) writer.Write(this.sViewState); } /**//// <summary> /// 当DataGrid上有动作的时候激发,这里值捕捉分页的命令,所以在使用的时候最好你的按钮的CommandName和这里面的一样 /// </summary> /// <param name="e"></param> protected override void OnItemCommand(DataGridCommandEventArgs e) ...{ string strCommandName = e.CommandName; if(e.CommandName == null) return; strCommandName = string.IsInterned(strCommandName); switch(e.CommandName) ...{ case "FirstPAGE": ...{ this.GoToPage(0); break; } case "PrevPAGE": ...{ this.GoToPage(Math.Max((this.tiTableInfo.CurrentPageIndex - 1), 0)); break; } case "NextPAGE": ...{ this.GoToPage(Math.Min((this.tiTableInfo.CurrentPageIndex + 1), (this.tiTableInfo.PageCount - 1))); break; } case "LastPAGE": ...{ this.GoToPage((this.tiTableInfo.PageCount - 1)); break; } } base.OnItemCommand(e); } /**//// <summary> /// 跳转到指定的页 /// </summary> /// <param name="pageIndex"></param> private void GoToPage(int pageIndex) ...{ this.tiTableInfo.CurrentPageIndex = pageIndex; SqlDataAdapter dsCommand = new SqlDataAdapter(this.CommandText, this.ConnectionString); dsCommand.Fill(this.dtDataTable); this.GetCurPageData(); this.DataSource = this.dtDataView; base.DataBind(); } /**//// <summary> /// 取当前显示页面数据到DataView /// </summary> private void GetCurPageData() ...{ //是否分页 if(!this.tiTableInfo.AllowPaging) ...{ //多一行为合计预留 this.PageSize = this.dtDataTable.Rows.Count + 1; this.dtDataView = this.dtDataTable.Copy(); } else ...{ //多两行,为本页合计与总合计预留 this.PageSize = this.tiTableInfo.PageSize + 2; //取当前页的数据 this.dtDataView = this.dtDataTable.Clone(); for(int i = 0; i < this.tiTableInfo.PageSize; i++) ...{ if((i + this.tiTableInfo.CurrentPageIndex * this.tiTableInfo.PageSize) < this.dtDataTable.Rows.Count) this.dtDataView.ImportRow(this.dtDataTable.Rows[i + this.tiTableInfo.CurrentPageIndex * this.tiTableInfo.PageSize]); } } //显示合计 if(this.IsShowSum) ...{ //合计的列 string[] arrSumColumn = this.SumColumn.Split('|'); //分页合计与总合计的值 long[] iSumValue = new long[arrSumColumn.Length]; long[] iPageSumValue = new long[arrSumColumn.Length]; double[] dSumValue = new double[arrSumColumn.Length]; double[] dPageSumValue = new double[arrSumColumn.Length]; int iStringColumn = -1; DataRow row; //计算合计值 for(int i = 0; i < arrSumColumn.Length; i++) ...{ //判断当前列名是否在数据表中 if(this.dtDataView.Columns.Contains(arrSumColumn[i])) ...{ string sDataType = this.dtDataView.Columns[arrSumColumn[i]].DataType.FullName; //计算整数 if((sDataType == "System.Int16")||(sDataType == "System.Int32")||(sDataType == "System.Int64")|| (sDataType == "System.UInt16")||(sDataType == "System.UInt32")||(sDataType == "System.UInt64")) ...{ //当前页合计数 iPageSumValue[i] = 0; for(int j = 0; j < this.dtDataView.Rows.Count; j++) ...{ iPageSumValue[i] += Convert.ToInt64(this.dtDataView.Rows[j][arrSumColumn[i]]); } //总合计数 iSumValue[i] = 0; for(int j = 0; j < this.dtDataTable.Rows.Count; j++) ...{ iSumValue[i] += Convert.ToInt64(this.dtDataTable.Rows[j][arrSumColumn[i]]); } } //计算小数 if((sDataType == "System.Decimal")||(sDataType == "System.Double")||(sDataType == "System.Single")) ...{ //当前页合计数 dPageSumValue[i] = 0.0; for(int j = 0; j < this.dtDataView.Rows.Count; j++) ...{ dPageSumValue[i] += Convert.ToDouble(this.dtDataView.Rows[j][arrSumColumn[i]]); } //总合计数 dSumValue[i] = 0.0; for(int j = 0; j < this.dtDataTable.Rows.Count; j++) ...{ dSumValue[i] += Convert.ToDouble(this.dtDataTable.Rows[j][arrSumColumn[i]]); } } } } //取得第一列String字段编号,用于放置“合计” for(int i = 0; i < this.dtDataView.Columns.Count; i++) ...{ string sDataType = this.dtDataView.Columns[i].DataType.FullName; if(this.dtDataView.Columns[i].DataType.FullName == "System.String") ...{ iStringColumn = i; break; } } //判断是否有本页合计 if((this.tiTableInfo.AllowPaging) && (this.tiTableInfo.PageCount > 1)) ...{ row = this.dtDataView.NewRow(); row.BeginEdit(); if(iStringColumn >= 0) row[iStringColumn] = "本页合计"; //按对应的列放置合计数 for(int i = 0; i < arrSumColumn.Length; i++) ...{ if(this.dtDataView.Columns.Contains(arrSumColumn[i])) ...{ row[arrSumColumn[i]] = Math.Max(iPageSumValue[i], dPageSumValue[i]); } } row.EndEdit(); this.dtDataView.Rows.Add(row); } //汇总和计 row = this.dtDataView.NewRow(); row.BeginEdit(); if(iStringColumn >= 0) row[iStringColumn] = "汇总和计"; //按对应的列放置合计数 for(int i = 0; i < arrSumColumn.Length; i++) ...{ if(this.dtDataView.Columns.Contains(arrSumColumn[i])) ...{ row[arrSumColumn[i]] = Math.Max(iSumValue[i], dSumValue[i]); } } row.EndEdit(); this.dtDataView.Rows.Add(row); } } /**//// <summary> /// 在指定的单元格里面创建分页控件,此方法类似于设计模式里面的Builder /// </summary> /// <param name="cell"></param> private void CreatePager(TableCell cell) ...{ // 分页控件的父控件容器 Table tblContent= new Table(); tblContent.Font.Name = this.Font.Name; tblContent.Font.Size = FontUnit.Point(10); tblContent.BorderStyle = this.BorderStyle; tblContent.BorderWidth = Unit.Parse("0"); tblContent.BorderColor = this.BorderColor; tblContent.Width = Unit.Parse("100%"); tblContent.BackColor = this.PagerStyle.BackColor; tblContent.ForeColor = this.ForeColor; tblContent.CellPadding = 0; tblContent.CellSpacing = 0; // 为父控件tblContent添加一个行和列用来放置产生的UI。 // 只添加一行。 TableRow rowFirst= new TableRow(); tblContent.Rows.Add(rowFirst); // 导出数据部分========================= if(this.IsShowSave) ...{ TableCell cellExportData = new TableCell(); this.BuildExportDataUI(cellExportData); rowFirst.Cells.Add(cellExportData); } // 添加记录数量信息========================= TableCell cellRowInfo = new TableCell(); cellRowInfo.Attributes["align"] = "center"; if(this.tiTableInfo.AllowPaging) ...{ cellRowInfo.Text = "第 " + (this.tiTableInfo.CurrentPageIndex + 1).ToString() + "/" + this.tiTableInfo.PageCount.ToString() + " 页 " + "每页 " + this.tiTableInfo.PageSize.ToString() + " 条 " + "共 " + this.tiTableInfo.RecordCount.ToString() + " 条记录"; } else ...{ cellRowInfo.Text = "共 " + this.tiTableInfo.RecordCount.ToString() + " 条记录"; } rowFirst.Cells.Add(cellRowInfo); // 添加翻页信息========================= if(this.tiTableInfo.AllowPaging) ...{ cellRowInfo = new TableCell(); cellRowInfo.HorizontalAlign = HorizontalAlign.Right; this.BuildNextPrevUI(cellRowInfo); rowFirst.Cells.Add(cellRowInfo); } cell.Controls.Add(tblContent); } /**//// <summary> /// 在指定的单元格里面创建向前或者向后的UI界面 /// </summary> /// <param name="cell">需要创建向前或者向后UI的单元格</param> private void BuildNextPrevUI(TableCell cell) ...{ // 判断是否需要创建翻页的UI如果只有一页的信息则不需要创建了 bool bIsBuildNextPrevUI = ((this.tiTableInfo.CurrentPageIndex < 0) ? false: ((this.tiTableInfo.CurrentPageIndex > (this.tiTableInfo.PageCount - 1)) == false));; // 判断当前是不是第一页 bool bIsFirstPage = (this.tiTableInfo.CurrentPageIndex > 0); // 判断当前是不是最后一页 bool bIsLastPage = (this.tiTableInfo.CurrentPageIndex < (this.tiTableInfo.PageCount - 1)); // 要创建的四个翻页控件的UI // 创建转到第一页的控件 LinkButton btnFirst= new LinkButton(); btnFirst.ID = "First"; btnFirst.CommandName = "FirstPAGE"; btnFirst.Font.Name = this.Font.Name; btnFirst.Font.Size = FontUnit.Point(10); btnFirst.ForeColor = this.ForeColor; btnFirst.ToolTip = "转到第一页"; btnFirst.Text = "首页"; // 确定转向第一页的按钮是否可用 btnFirst.Enabled = (!bIsBuildNextPrevUI ? false : bIsFirstPage); cell.Controls.Add(btnFirst); cell.Controls.Add(new LiteralControl(" ")); // 创建向前翻页的控件 LinkButton btnPrev = new LinkButton(); btnPrev.ID = "Prev"; btnPrev.CommandName = "PrevPAGE"; btnPrev.Font.Name = this.Font.Name; btnPrev.Font.Size = FontUnit.Point(10); btnPrev.ForeColor = this.ForeColor; btnPrev.ToolTip = "转到前一页"; btnPrev.Text = "上一页"; btnPrev.Enabled = (!bIsBuildNextPrevUI ? false : bIsFirstPage); cell.Controls.Add(btnPrev); cell.Controls.Add(new LiteralControl(" ")); // 创建向后翻页的控件 LinkButton btnNext = new LinkButton(); btnNext.ID = "Next"; btnNext.CommandName = "NextPAGE"; btnNext.Font.Name = this.Font.Name; btnNext.Font.Size = FontUnit.Point(10); btnNext.ForeColor = this.ForeColor; btnNext.ToolTip = "转到下一页"; btnNext.Text = "下一页"; btnNext.Enabled = (!bIsBuildNextPrevUI ? false : bIsLastPage); cell.Controls.Add(btnNext); cell.Controls.Add(new LiteralControl(" ")); // 创建翻到最后一页的控件 LinkButton btnLast = new LinkButton(); btnLast.ID = "Last"; btnLast.CommandName = "LastPAGE"; btnLast.Font.Name = this.Font.Name; btnLast.Font.Size = FontUnit.Point(10); btnLast.ForeColor = this.ForeColor; btnLast.ToolTip = "转到最后一页"; btnLast.Text = "尾页"; btnLast.Enabled = (!bIsBuildNextPrevUI ? false : bIsLastPage); cell.Controls.Add(btnLast); } /**//// <summary> /// 创建数据导出的单元格 /// </summary> /// <param name="cell"></param> private void BuildExportDataUI(TableCell cell) ...{ Literal lable = new Literal(); lable.Text = "导出文件为:"; Style cssStyle = new Style(); cssStyle.BorderStyle = BorderStyle.Solid; cssStyle.BorderWidth = Unit.Pixel(1); cssStyle.BorderColor = Color.FromName("#000066"); cssStyle.Height = Unit.Pixel(20); cssStyle.Font.Size = FontUnit.Point(8); DropDownList ddlExportFileType = new DropDownList(); ddlExportFileType.ID = "ddlExportFileType"; ddlExportFileType.Items.Add(new ListItem("Html文件","html")); ddlExportFileType.Items.Add(new ListItem("Txt文件","txt")); ddlExportFileType.Items.Add(new ListItem("Excel文件","xls")); ddlExportFileType.Items.Add(new ListItem("XML文件","xml")); ddlExportFileType.ApplyStyle(cssStyle); Button btnSave = new Button(); btnSave.Text = "保存"; // 事件处理函数 btnSave.Click +=new EventHandler(btnSave_Click); btnSave.ApplyStyle(cssStyle); cell.HorizontalAlign = HorizontalAlign.Left; cell.VerticalAlign = VerticalAlign.Middle; cell.Controls.Add(lable); cell.Controls.Add(ddlExportFileType); cell.Controls.Add(btnSave); } /**//// <summary> /// 处理保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) ...{ //默认的保存类型是html string strSaveType = "html"; Control control = this.GetControl(((Button)sender).Parent.Controls,"ddlExportFileType"); if(control != null) ...{ strSaveType = ((DropDownList)control).SelectedValue; } DataTable dt = new DataTable(); SqlDataAdapter dsCommand = new SqlDataAdapter(this.CommandText, this.ConnectionString); dsCommand.Fill(dt); //显示合计 if(this.IsShowSum) ...{ //合计的列 string[] arrSumColumn = this.SumColumn.Split('|'); //分页合计与总合计的值 long[] iSumValue = new long[arrSumColumn.Length]; double[] dSumValue = new double[arrSumColumn.Length]; int iStringColumn = -1; DataRow row; //计算合计值 for(int i = 0; i < arrSumColumn.Length; i++) ...{ //判断当前列名是否在数据表中 if(dt.Columns.Contains(arrSumColumn[i])) ...{ string sDataType = dt.Columns[arrSumColumn[i]].DataType.FullName; //计算整数 if((sDataType == "System.Int16")||(sDataType == "System.Int32")||(sDataType == "System.Int64")|| (sDataType == "System.UInt16")||(sDataType == "System.UInt32")||(sDataType == "System.UInt64")) ...{ //总合计数 iSumValue[i] = 0; for(int j = 0; j < dt.Rows.Count; j++) ...{ iSumValue[i] += Convert.ToInt64(dt.Rows[j][arrSumColumn[i]]); } } //计算小数 if((sDataType == "System.Decimal")||(sDataType == "System.Double")||(sDataType == "System.Single")) ...{ //总合计数 dSumValue[i] = 0.0; for(int j = 0; j < dt.Rows.Count; j++) ...{ dSumValue[i] += Convert.ToDouble(dt.Rows[j][arrSumColumn[i]]); } } } } //取得第一列String字段编号,用于放置“合计” for(int i = 0; i < dt.Columns.Count; i++) ...{ string sDataType = dt.Columns[i].DataType.FullName; if(dt.Columns[i].DataType.FullName == "System.String") ...{ iStringColumn = i; break; } } //汇总和计 row = dt.NewRow(); row.BeginEdit(); if(iStringColumn >= 0) row[iStringColumn] = "汇总和计"; //按对应的列放置合计数 for(int i = 0; i < arrSumColumn.Length; i++) ...{ if(dt.Columns.Contains(arrSumColumn[i])) ...{ row[arrSumColumn[i]] = Math.Max(iSumValue[i], dSumValue[i]); } } row.EndEdit(); dt.Rows.Add(row); } switch(strSaveType) ...{ case "txt": this.sSaveWindow = this.DataTableToTxt(dt); break; case "xls": this.sSaveWindow = this.DataTableToXls(dt); break; case "xml": this.sSaveWindow = this.DataTableToXml(dt); break; default: this.sSaveWindow = this.DataTableToHtml(dt); break; } dt.Dispose(); } /**//// <summary> /// 在指定的控件集合中查找指定名称的控件 /// </summary> /// <param name="controls">控件集合</param> /// <param name="controlName">要查找的控件的名字ID</param> /// <returns></returns> private Control GetControl(ControlCollection controls,string controlName) ...{ foreach(Control control in controls) ...{ if(control.ID == controlName) ...{ return control; } //递归 if(control.HasControls()) return GetControl(control.Controls,controlName); } return null; } /**//// <summary> /// 导出文件为TXT文件,需要小心特殊字符的处理 /// </summary> /// <param name="dv"></param> /// <returns></returns> private string DataTableToTxt(DataTable dv) ...{ string sFilePath = this.Page.Request.PhysicalApplicationPath + this.sSavePath + "/"; if(!Directory.Exists(sFilePath)) ...{ Directory.CreateDirectory(sFilePath); } string sFileName = Guid.NewGuid().ToString()+".txt"; FileStream fs = new FileStream(sFilePath + sFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None); StreamWriter swExportWriter = new StreamWriter(fs,Encoding.UTF8); swExportWriter.WriteLine(this.Title); for(int i = 0; i < dv.Columns.Count; i++) ...{ swExportWriter.Write(dv.Columns[i].ColumnName); swExportWriter.Write(" "); } swExportWriter.WriteLine(""); for(int i = 0; i < dv.Rows.Count; i++) ...{ for(int j = 0; j < dv.Columns.Count; j++) ...{ swExportWriter.Write(dv.Rows[i][j].ToString()); swExportWriter.Write(" "); } swExportWriter.WriteLine(""); } swExportWriter.Close(); fs.Close(); return "<script language='javascript'>window.open('"+ this.Page.Request.ApplicationPath + "/" + this.sSavePath + "/" + sFileName+ "')</script>"; } /**//// <summary> /// 导出文件为Xls文件,需要小心特殊字符的处理 /// </summary> /// <param name="dv"></param> /// <returns></returns> private string DataTableToXls(DataTable dv) ...{ string sFilePath = this.Page.Request.PhysicalApplicationPath + this.sSavePath + "/"; if(!Directory.Exists(sFilePath)) ...{ Directory.CreateDirectory(sFilePath); } string sFileName = Guid.NewGuid().ToString()+".xls"; FileStream fs = new FileStream(sFilePath + sFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None); StreamWriter swExportWriter = new StreamWriter(fs,Encoding.UTF8); HtmlTextWriter hwExportWriter = new HtmlTextWriter(swExportWriter); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Html); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Head); hwExportWriter.WriteLine("<Title>" + dv.TableName + "</Title>"); hwExportWriter.RenderEndTag(); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Body); hwExportWriter.AddAttribute("border","1"); hwExportWriter.AddAttribute("borderColor","#000000"); hwExportWriter.AddAttribute("cellpadding","0"); hwExportWriter.AddAttribute("cellspacing","0"); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Table); hwExportWriter.AddAttribute("align","center"); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Tr); hwExportWriter.AddAttribute("colspan",dv.Columns.Count.ToString()); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Td); hwExportWriter.Write(this.Title); hwExportWriter.RenderEndTag(); hwExportWriter.RenderEndTag(); hwExportWriter.AddAttribute("align","center"); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Tr); for(int j = 0; j < dv.Columns.Count; j++) ...{ hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Td); hwExportWriter.Write(dv.Columns[j].ColumnName); hwExportWriter.RenderEndTag(); } hwExportWriter.RenderEndTag(); for(int i = 0; i < dv.Rows.Count; i++) ...{ hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Tr); for(int j = 0; j < dv.Columns.Count; j++) ...{ hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Td); hwExportWriter.Write(dv.Rows[i][j].ToString()); hwExportWriter.RenderEndTag(); } hwExportWriter.RenderEndTag(); } hwExportWriter.RenderEndTag(); hwExportWriter.RenderEndTag(); hwExportWriter.RenderEndTag(); hwExportWriter.Close(); swExportWriter.Close(); fs.Close(); return "<script language='javascript'>window.open('"+ this.Page.Request.ApplicationPath + "/" + this.sSavePath + "/" + sFileName+ "')</script>"; } /**//// <summary> /// 导出文件为XML文件,需要小心特殊字符的处理 /// </summary> /// <param name="dv"></param> /// <returns></returns> private string DataTableToXml(DataTable dv) ...{ string sFilePath = this.Page.Request.PhysicalApplicationPath + this.sSavePath + "/"; if(!Directory.Exists(sFilePath)) ...{ Directory.CreateDirectory(sFilePath); } string sFileName = Guid.NewGuid().ToString()+".xml"; FileStream fs = new FileStream(sFilePath + sFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None); XmlTextWriter xwExportWriter = new XmlTextWriter(fs,Encoding.UTF8); xwExportWriter.WriteStartDocument(); xwExportWriter.WriteStartElement(dv.TableName); for(int i = 0; i < dv.Rows.Count; i++) ...{ xwExportWriter.WriteStartElement("ROW" + i.ToString()); for(int j = 0; j < dv.Columns.Count; j++) ...{ xwExportWriter.WriteElementString(dv.Columns[j].ColumnName, dv.Rows[i][j].ToString()); } xwExportWriter.WriteEndElement(); } xwExportWriter.WriteEndElement(); xwExportWriter.WriteEndDocument(); xwExportWriter.Close(); fs.Close(); return "<script language='javascript'>window.open('"+ this.Page.Request.ApplicationPath + "/" + this.sSavePath + "/" + sFileName+ "')</script>"; } /**//// <summary> /// 导出文件为Html文件,需要小心特殊字符的处理 /// </summary> /// <param name="dv"></param> /// <returns></returns> private string DataTableToHtml(DataTable dv) ...{ string sFilePath = this.Page.Request.PhysicalApplicationPath + this.sSavePath + "/"; if(!Directory.Exists(sFilePath)) ...{ Directory.CreateDirectory(sFilePath); } string sFileName = Guid.NewGuid().ToString()+".html"; FileStream fs = new FileStream(sFilePath + sFileName, FileMode.CreateNew, FileAccess.Write, FileShare.None); StreamWriter swExportWriter = new StreamWriter(fs,Encoding.UTF8); HtmlTextWriter hwExportWriter = new HtmlTextWriter(swExportWriter); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Html); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Head); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Title); hwExportWriter.Write(this.Title); hwExportWriter.RenderEndTag(); hwExportWriter.AddAttribute("Charset","UTF-8"); hwExportWriter.AddAttribute("ContentType","Application/ms-excel"); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Meta); hwExportWriter.RenderEndTag(); hwExportWriter.RenderEndTag(); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Body); hwExportWriter.AddAttribute("border","1"); hwExportWriter.AddAttribute("borderColor","#000000"); hwExportWriter.AddAttribute("cellpadding","0"); hwExportWriter.AddAttribute("cellspacing","0"); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Table); hwExportWriter.AddAttribute("align","center"); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Tr); hwExportWriter.AddAttribute("colspan",dv.Columns.Count.ToString()); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Td); hwExportWriter.Write(this.Title); hwExportWriter.RenderEndTag(); hwExportWriter.RenderEndTag(); hwExportWriter.AddAttribute("align","center"); hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Tr); for(int j = 0; j < dv.Columns.Count; j++) ...{ hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Td); hwExportWriter.Write(dv.Columns[j].ColumnName); hwExportWriter.RenderEndTag(); } hwExportWriter.RenderEndTag(); for(int i = 0; i < dv.Rows.Count; i++) ...{ hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Tr); for(int j = 0; j < dv.Columns.Count; j++) ...{ hwExportWriter.RenderBeginTag(HtmlTextWriterTag.Td); hwExportWriter.Write(dv.Rows[i][j].ToString() + " "); hwExportWriter.RenderEndTag(); } hwExportWriter.RenderEndTag(); } hwExportWriter.RenderEndTag(); hwExportWriter.RenderEndTag(); hwExportWriter.RenderEndTag(); hwExportWriter.Close(); swExportWriter.Close(); fs.Close(); return "<script language='javascript'>window.open('"+ this.Page.Request.ApplicationPath + "/" + this.sSavePath + "/" + sFileName+ "')</script>"; } }}