亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

分享一個動態生成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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美日韩精品免费视频| 38少妇精品导航| 欧美国产日韩精品| 亚洲欧洲一区二区三区久久| 青青在线视频一区二区三区| 国产精品伦子伦免费视频| 成人黄色av网站| 国产精品久久久久久久久粉嫩av| 日韩理论片久久| 亚洲国产三级网| 国产午夜精品美女视频明星a级| 久久香蕉国产线看观看av| 国产精品一区二区性色av| 成人黄色短视频在线观看| 日韩成人中文字幕在线观看| 久久久久九九九九| 久久精品成人欧美大片| 成人免费网站在线| 日韩精品电影网| 岛国av在线不卡| 欧美成年人视频| 日韩专区中文字幕| 欧美老妇交乱视频| 成人欧美一区二区三区黑人孕妇| 亚洲视频第一页| 国产精品久久久久影院日本| 日本在线观看天堂男亚洲| 美女扒开尿口让男人操亚洲视频网站| 日韩国产在线播放| 国产成人精品在线视频| 国产日韩在线看片| 精品少妇一区二区30p| 91美女福利视频高清| 成人欧美一区二区三区在线| 精品五月天久久| 日韩在线精品视频| 91精品国产自产91精品| 在线免费观看羞羞视频一区二区| 欧洲永久精品大片ww免费漫画| 国产一区二区三区在线免费观看| 精品国模在线视频| 日韩在线观看视频免费| 久久影院中文字幕| 丝袜一区二区三区| 日韩二区三区在线| www.日本久久久久com.| 日韩暖暖在线视频| 国产成人欧美在线观看| 成人国产在线视频| 中文字幕综合一区| 日韩女在线观看| 日韩免费av一区二区| 在线日韩精品视频| 91精品国产自产91精品| 中文字幕精品av| 91a在线视频| 热re91久久精品国99热蜜臀| 狠狠干狠狠久久| 亚洲欧洲自拍偷拍| 美日韩在线视频| 亚洲aa中文字幕| 精品国产区一区二区三区在线观看| 欧美黄色性视频| 亚洲福利在线视频| 精品性高朝久久久久久久| 亚洲综合第一页| 精品一区二区三区电影| 亚洲黄色在线看| 91香蕉亚洲精品| 欧美日韩国产综合新一区| 秋霞av国产精品一区| 中国日韩欧美久久久久久久久| 日韩中文字幕在线看| 亚洲开心激情网| 国内精品久久久| 成人www视频在线观看| 超碰97人人做人人爱少妇| 欧美黄网免费在线观看| 欧美极品欧美精品欧美视频| 欧美精品18videosex性欧美| 欧美性生活大片免费观看网址| 成人做爰www免费看视频网站| 欧美日韩国产激情| 精品久久久久久亚洲国产300| 久久久精品网站| 欧美日韩高清在线观看| 亚洲欧洲国产精品| 91探花福利精品国产自产在线| 欧美日韩免费网站| 海角国产乱辈乱精品视频| 91在线精品视频| 精品亚洲一区二区三区四区五区| 欧美成人午夜激情视频| 6080yy精品一区二区三区| 欧美性理论片在线观看片免费| 亚洲自拍偷拍视频| 国内免费精品永久在线视频| 久热爱精品视频线路一| 欧美成人黄色小视频| 久久久国产精彩视频美女艺术照福利| 国产成+人+综合+亚洲欧美丁香花| 日韩欧美中文字幕在线播放| 成人中文字幕+乱码+中文字幕| 色琪琪综合男人的天堂aⅴ视频| 亚洲第一色在线| 亚州成人av在线| …久久精品99久久香蕉国产| 欧美成人中文字幕在线| 91免费国产视频| 国产日韩欧美视频在线| 欧美xxxx18国产| 欧美电影免费播放| www.亚洲天堂| 疯狂做受xxxx欧美肥白少妇| 97av在线视频免费播放| 国产精品久久久久久久一区探花| 久久精品中文字幕| 欧美网站在线观看| 亚洲一区二区三区视频播放| 欧美视频在线看| 国色天香2019中文字幕在线观看| 国产亚洲福利一区| 菠萝蜜影院一区二区免费| 国产一区二区三区在线观看视频| 国产91精品最新在线播放| 中文字幕精品影院| 国产不卡在线观看| 国产精品盗摄久久久| 日韩专区中文字幕| 欧美国产日韩在线| 神马久久桃色视频| 欧美电影电视剧在线观看| 日韩av电影在线免费播放| 一区二区三区高清国产| 国产最新精品视频| 国产精品女人网站| 91在线观看免费高清完整版在线观看| 亚洲一区美女视频在线观看免费| 懂色aⅴ精品一区二区三区蜜月| 日本欧美一二三区| 国产一区二区三区视频在线观看| 2024亚洲男人天堂| 国产经典一区二区| 国产精品美乳一区二区免费| 91在线中文字幕| 自拍偷拍亚洲精品| 亚洲天堂视频在线观看| 91av在线播放| 日韩乱码在线视频| 欧美日韩国产成人在线观看| 一区二区三欧美| 亚洲区bt下载| 亚洲片在线观看| 亚洲色图国产精品| 国产精品偷伦视频免费观看国产| 欧美精品999| 免费不卡在线观看av| 国产午夜精品视频| 精品国模在线视频| 亚洲18私人小影院| 91高清视频免费观看| 久久好看免费视频| 色婷婷亚洲mv天堂mv在影片| 欧美一级大片在线免费观看|