西宁专业网站建设公司,怎么区别网站开发语言,wordpress主题后门检查,网络营销解释有几个报表, 查询条件都一样#xff0c;仅仅里面GridView中有几个列区别#xff0c;以前图快#xff0c;就把原来Report.aspx文件拷贝一份#xff0c;改名为Report1.aspx#xff0c;然后#xff0c;修改里面的column#xff0c;然后再由后台库查出数据#xff0c;填充到…有几个报表, 查询条件都一样仅仅里面GridView中有几个列区别以前图快就把原来Report.aspx文件拷贝一份改名为Report1.aspx然后修改里面的column然后再由后台库查出数据填充到这个report中来。 今天终于不耐烦了这个方法确实太笨了改一改方案如下 1.创建一个IReport的接口所有的report都实现这个接口。 public interface IReport { // 该report所有可用列集合(每一次查询不一定全部显示) Dictionarystring, string DictColMapping { get; } // (本次查询)该report显示的列KeyField和HeaderText集合 Dictionarystring, int DictColIndexMapping { get; } /// (本次查询)该report显示的列SortExpressField和所在位置Index集合 ListReportColumn ReportColumnCollection { get; } // 导出excel的文件名 string ToExcelName { get; } // 该report的唯一编号用于安全验证 string ReportResourceID { get; } // 产生report输入条件为一个参数数组 DataSet ProccessReport(params object[] ParamList); } 2.创建一个ReportColumn类。 public class ReportColumn { public string ColumnDataField { set; get; } public string ColumnHeaderText { set; get; } public string ColumnSortExpression { set; get; } public int ColumnIndex { set; get; } public ReportColumn(string _ColumnDataField, string _ColumnHeaderText, string _ColumnSortExpression, int _ColumnIndex) { this.ColumnDataField _ColumnDataField; this.ColumnHeaderText _ColumnHeaderText; this.ColumnSortExpression _ColumnSortExpression; this.ColumnIndex _ColumnIndex; } } 3.创建报表的抽象基类里面放些处理类似报表的通用方法。 public abstract class clsReportBase {} 4.创建实际的报表类 public class clsReport_SalesOrder : clsReportBase, IReport { private ListReportColumn _ReportColumnCollection; //该report所有可用列集合(每一次查询不一定全部显示) private Dictionarystring, string _DictColMapping; //(本次查询)该report显示的列KeyField和HeaderText集合 private Dictionarystring, int _DictColIndexMapping; //(本次查询)该report显示的列SortExpressField和所在位置Index集合 public clsReport_SalesOrder() { _ReportColumnCollection new ListReportColumn(); _DictColMapping new Dictionarystring, string(); _DictColIndexMapping new Dictionarystring, int(); FillReportColumnCollection(); } /// summary /// 填充该report所有可用列集合 /// /summary private void FillReportColumnCollection() { AddColumnToCollection(new ReportColumn(Province, 省, 省, 0)); AddColumnToCollection(new ReportColumn(Vertical, 行业, 行业, 1)); AddColumnToCollection(new ReportColumn(ProductLine, 产品, 产品, 2)); AddColumnToCollection(new ReportColumn(Subtotal, 订单额($), 订单额($), 3)); } /// summary /// 该report所有可用列集合(每一次查询不一定全部显示) /// /summary public ListReportColumn ReportColumnCollection { get { return _ReportColumnCollection; } } /// summary /// (本次查询)该report显示的列KeyField和HeaderText集合 /// /summary public Dictionarystring, string DictColMapping { get { return _DictColMapping; } } /// summary /// (本次查询)该report显示的列SortExpressField和所在位置Index集合 /// /summary public Dictionarystring, int DictColIndexMapping { get { return _DictColIndexMapping; } } /// summary /// (本次查询)该report需要格式化为货币的列集合 /// /summary public Liststring MoneyFormatColumnCollection { get { return _MoneyFormatColumnCollection; } } /// summary /// report名称 /// /summary public string ToExcelName { get { return 订单统计.xls; } } /// summary /// report唯一编码 /// /summary public string ReportResourceID { get { return 12345; } } private void AddColumnToCollection(ReportColumn column) { _ReportColumnCollection.Add(column); _DictColMapping.Add(column.ColumnDataField, column.ColumnHeaderText); _DictColIndexMapping.Add(column.ColumnSortExpression, column.ColumnIndex); } /// summary /// 产生report输入条件为一个参数数组 /// /summary /// param nameParamList/param /// returns/returns public DataSet ProccessReport(params object[] ParamList) { ...从ParamList参数列表里解析出查询条件然后从数据库取数据。 } } 5.前台aspx页面里的GridView asp:GridView IDGridView1 runatserver AutoGenerateColumnsfalse CellPadding2 CssClassautoTable AllowSortingfalse Columns /Columns/asp:GridView 6.在前台aspx.cs页面里通过url传来的报表类名反射出报表的实例。 protected void Page_Load(object sender, EventArgs e) { _InitReport(this.Request.QueryString[Report]); } private void _InitReport(string QueryString) { string reportClassName QueryString; string reportAssemblyName Test; string reportFullClassName reportAssemblyName . reportClassName; report (IReport)Assembly.Load(reportAssemblyName).CreateInstance(reportFullClassName); _DictColMapping new Dictionarystring, string(); _DictColMapping report.DictColMapping; _DictColIndexMapping new Dictionarystring, int(); _DictColIndexMapping report.DictColIndexMapping; GridView1.Columns.Clear(); foreach (ReportColumn column in report.ReportColumnCollection) { BoundField bf new BoundField(); bf.DataField column.ColumnDataField; bf.HeaderText column.ColumnHeaderText; bf.SortExpression column.ColumnSortExpression; bf.HeaderStyle.Wrap false; bf.ItemStyle.Wrap false; GridView1.Columns.Add(bf); } } protected void btn_Search_Click(object sender, EventArgs e) { object[] arr new object[] { UserObject, ConditionObject ... }; DataSet m_Data report.ProccessReport(arr); HideSomeColumns(m_Data); //如果需要可以在此屏蔽不显示的列设置列visiablefalse. this.GridView_SalesOrderSummarization.DataSource m_Data.Tables[0]; this.GridView_SalesOrderSummarization.DataBind(); } 7.这样, 就只用一个aspx文件文成多个报表了, 只要把类型当作参数传过来即可. Report.aspx?ReportclsReport_SalesOrder Report.aspx?ReportclsReport_SalesOrder2 这样就精简了前台aspx的程序数量, 方便了以后系统的维护. 转载于:https://www.cnblogs.com/liuzhendong/archive/2011/10/13/2210570.html