自定义分页组件DATAGRID-SQL

    技术2022-05-11  73

    自定义分页组件,数据量比较多的时候可以用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>";                    }    }}

     

     


    最新回复(0)