麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

分享一個動態生成RDLC報表的類

2019-11-17 01:31:59
字體:
來源:轉載
供稿:網友

分享一個動態生成RDLC報表的類

在實際工作中,當需要進行大批量查詢和生成報表的時候,可以使用我寫的類。

特點:

  • 無需報表設計器、無需為報表設置數據集
  • 只需要傳入查詢結果就可以全自動生成報表,傳入的對象為Dynamic(目前支持DataTable和IEnumable<T>的傳入參數)
  • 文字、數據表可以無限添加
  • 支持圖表 (2014-5-28 v0.4 增加參數類,完成圖表顯示功能)
  • 支持數據分組(2014-5-19 v0.3 添加表格內分組)

我沒有采用使用操縱微軟報表Schema的方法,而是用了拼接字符串:(

將來想到的擴展功能有:

  • 支持子報表

更新日志:

2014-5-15 更新,將匿名類轉換成DataTable,然后去除0和0.00%等字段。

* 2014-5-19 v0.3 添加表格內分組* 2014-5-28 v0.4 增加參數類,開始做圖表顯示功能

源碼

接口:

using System.Text;using System.xml;using System.Xml.Linq;using System.Xml.Serialization;using Microsoft.Reporting.WebForms;    public interface IDynamicReport    {        void SetReport(ReportViewer reportViewer);        void AddData<T>(IEnumerable<T> data);        void AddData(DataTable dataTable);        void ShowReport();        void LoadReport(string reportPath);        void SetColoumStyle(List<ReportColoumStyle> coloumStyle);        void AddText(string title);    }

輔助類和枚舉:

    public class ReportColoumStyle    {        public string ColoumName { get; set; }        public float ColoumWidth { get; set; }        public TextAlign TextAlign { get; set; }        public ReportColoumStyle()        {            ColoumWidth = DynamicReport.ColoumWidth;        }    }    public enum TextAlign    {        Left,        Center,        Right    }    public enum ReportType    {        Tables,        Chart,        Finally    }    internal enum DataType    {        DataTable,        Enumerable    }    internal class ReportItemPattern    {        public string DataSetName { get; set; }        public string DataSetString { get; set; }        public string TablixString { get; set; }        public dynamic Data { get; set; }        public string DataSetPattern        {            get            {                return "    <DataSet Name=/"@DataSetNameData/">" +                       "       <Fields>@Fields</Fields>" +                       "       <Query>" +                       "           <DataSourceName>DummyDataSource</DataSourceName>" +                       "           <CommandText />" +                       "       </Query>" +                       "    </DataSet>";            }        }        public string TablixPattern        {            get            {                return " <Tablix Name=/"Tablix@DataSetName/">" +                       "   <TablixBody>" +                       "       <TablixColumns>@TablixColumns</TablixColumns>" +                       "       <TablixRows>" +                       "           <TablixRow>" +                       "               <Height>0.23622in</Height>" +                       "               <TablixCells>@TablixHeader</TablixCells>" +                       "           </TablixRow>" +                       "           <TablixRow>" +                       "               <Height>0.23622in</Height>" +                       "               <TablixCells>@TablixCells</TablixCells>" +                       "           </TablixRow>" +                       "       </TablixRows>" +                       "   </TablixBody>" +                       "   <TablixColumnHierarchy>" +                       "       <TablixMembers>@TablixMember</TablixMembers>" +                       "   </TablixColumnHierarchy>" +                       "   <TablixRowHierarchy>" +                       "       <TablixMembers>" +                       "           <TablixMember>" +                       "               <KeepWithGroup>After</KeepWithGroup>" +                       "           </TablixMember>" +                       "           <TablixMember>" +                       "               <Group Name=/"詳細信息@DataSetName/" />" +                       "           </TablixMember>" +                       "       </TablixMembers>" +                       "   </TablixRowHierarchy>" +                       "   <DataSetName>@DataSetNameData</DataSetName>" +                       "   <Top>@TopPositioncm</Top>" +                       "   <Left>@LeftPostioncm</Left>" +                       "   <Height>1.2cm</Height>" +                       "   <Width>14.35207cm</Width>" +                       "   <Style>" +                       "       <Border>" +                       "           <Style>None</Style>" +                       "       </Border>" +                       "   </Style>" +                       "</Tablix>";            }        }    }    internal static class DynamicReportExtension    {        public static dynamic RemoveZeroData(this object data)        {            if (data is DataTable)            {                return ((DataTable)data).ChangeEachColumnTypeToString();            }            else if (data is IEnumerable)            {                var _data = ((IEnumerable) data).Cast<object>();                return _data.CopyToDataTable().RemoveZeroData();            }            return data;        }        public static DataTable ChangeEachColumnTypeToString(this DataTable dt)        {            DataTable tempdt = new DataTable();            foreach (DataColumn dc in dt.Columns)            {                DataColumn tempdc = new DataColumn();                tempdc.ColumnName = dc.ColumnName;                tempdc.DataType = typeof (String);                tempdt.Columns.Add(tempdc);            }            int coloumCount = dt.Columns.Count;            foreach (DataRow dr in dt.Rows)            {                var newrow = tempdt.NewRow();                for (int i = 0; i < coloumCount; i ++)                {                    var value = dr[i].ToString();                    switch (value)                    {                        case "0":                        case "0.00%":                            newrow[i] = "-";                            break;                        default:                            newrow[i] = value;                            break;                    }                                    }                tempdt.Rows.Add(newrow);            }            return tempdt;        }    }    internal static class DataSetLinqOperators    {        public static DataTable CopyToDataTable<T>(this IEnumerable<T> source)        {            return new ObjectShredder<T>().Shred(source, null, null);        }        public static DataTable CopyToDataTable<T>(this IEnumerable<T> source,                                                   DataTable table, LoadOption? options)        {            return new ObjectShredder<T>().Shred(source, table, options);        }    }    internal class ObjectShredder<T>    {        PRivate FieldInfo[] _fi;        private PropertyInfo[] _pi;        private Dictionary<string, int> _ordinalMap;        private Type _type;        public ObjectShredder()        {            _type = typeof (T);            _fi = _type.GetFields();            _pi = _type.GetProperties();            _ordinalMap = new Dictionary<string, int>();        }        public DataTable Shred(IEnumerable<T> source, DataTable table, LoadOption ? options)        {            if (typeof (T).IsPrimitive)            {                return ShredPrimitive(source, table, options);            }            if (table == null)            {                table = new DataTable(typeof (T).Name);            }            // now see i
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜91视频| 四季久久免费一区二区三区四区 | 久久久婷婷一区二区三区不卡 | 日本aaaa片毛片免费观看视频 | 九九热在线视频免费观看 | 色播视频在线播放 | 免费国产在线观看 | 毛片在线免费视频 | 黄色片网站免费观看 | 成年人高清视频在线观看 | av成人在线播放 | 爱爱视频天天干 | 国产亚洲精品综合一区91 | 久草热久 | 国产精品久久久久久影视 | 成人视屏在线观看 | 有色视频在线观看 | 久久精品一区二区三区不卡牛牛 | 亚洲一区二区三区四区精品 | 大西瓜永久免费av在线 | 羞羞视频免费观看网站 | 热99在线| 国产精品一区二区三区在线播放 | 一级黄色国产视频 | 欧美一级片在线 | 欧美性生活免费视频 | 狠狠操操| 亚洲第一视频 | 男男羞羞视频网站国产 | 国产chinesehd精品91 | 久久99国产精品久久 | 成人羞羞视频在线观看 | 久久区二区 | 欧美精品电影一区二区 | 久久久久久久一区 | 少妇一级淫片免费看 | 亚洲成人激情在线 | 99精品国产一区二区三区 | 免费国产a | 欧美日韩精品一区二区三区蜜桃 | 伊人成人免费视频 |