您的位置:首页 > 其它

自定义分页组件DATAGRID-DataTable

2007-01-31 11:21 375 查看
自定义分页组件,数据量比较少的时候可以用DataTable作为参数


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;




[assembly:TagPrefix("JJ.Web.UI","JJ")]


namespace JJ.Web.UI




...{




/**//// <summary>


/// JJDZDataGrid 的摘要说明。


/// </summary>


[ToolboxData("<{0}:dtDataGrid runat=server></{0}:dtDataGrid>")]


public class dtDataGrid : 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>";


//行数过多提示信息


private string sMoreRow = "<font color='##FF0000'>查询数据行数过多,实现翻页及导出功能将十分缓慢!</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>


public dtDataGrid():base()




...{


this.dtDataView = new DataTable();




this.sSaveWindow = "";


this.sSavePath = "JJDZFILES";


}






/**//// <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.dtDataTable = (DataTable)this.ViewState["DataSource"];


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()




...{


//保存数据到缓存


this.dtDataTable = (DataTable)this.DataSource;


this.ViewState["DataSource"] = this.dtDataTable;




//没有指定数据源


if(this.dtDataTable == null)


return;




//保存页数数据


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);




if(this.tiTableInfo != null)


if(this.dtDataTable.Rows.Count > 1000)


writer.Write(this.sMoreRow);


}




/**//// <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;


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;


}




if(this.dtDataTable == null)


return;




DataTable dt = this.dtDataTable.Copy();




//显示合计


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>";


}


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: