自定义分页组件DATAGRID-DataTable

自定义分页组件,数据量比较少的时候可以用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() 
+ "&nbsp;");
                    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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值