c#:list转datatable;xtraReport打印

由于项目习惯将数据组成一个对象list,在遇到xtraReport打印时,经常需要将list转成datatable,特此记录一下

  1. xtraReport
    设计界面
		/// <summary>
        /// 模板设计
        /// </summary>
        public void XtraReportDesignForm( DataSet ds)
        {
            try
            {
                string file = System.AppDomain.CurrentDomain.BaseDirectory + @"ReportTemplate\Breastfeeding.repx";
                if (!File.Exists(file))
                {
                    MessageAlertHelper.ShowWaring(null, "提示", "未找到报表模板!");
                    return;
                }
                 打开模板设计器
                XRDesignFormEx frm = new XRDesignFormEx();

                frm.FileName = file;

                if (File.Exists(frm.FileName))
                {
                    frm.OpenReport(frm.FileName);

                    if (ds != null)
                    {
                        bool SchemaIsNull = string.IsNullOrEmpty(frm.DesignPanel.Report.DataSourceSchema);
                        MemoryStream ms = new MemoryStream();
                        ds.WriteXmlSchema(ms);
                        frm.DesignPanel.Report.DataSourceSchema = System.Text.Encoding.Default.GetString(ms.ToArray());

                        if (SchemaIsNull)
                        {
                            frm.SaveReport(frm.FileName);
                            frm.OpenReport(frm.FileName);
                        }
                    }
                }

                frm.ShowDialog();
            }
            catch (Exception ex)
            {
                MessageAlertHelper.ShowWaring(ex.ToString());
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
DataSet ds = PrintData();
XtraReportDesignForm(ds);

打印界面

        /// <summary>
        /// 打印
        /// </summary>
        /// <param name="templetFileName"></param>
        /// <param name="ds"></param>
        /// <param name="blnPreview"></param>
        /// <param name="thread"></param>
        public static void Print( DataSet ds, bool blnPreview)
        {
            // 加载模板
            XtraReport rp = new XtraReport();
            string printName = System.AppDomain.CurrentDomain.BaseDirectory + @"ReportTemplate\Breastfeeding.repx";
            rp.LoadLayout(printName);
            rp.PrinterName = printName;

            // 加载数据
            rp.DataSource = ds;

            // 打印或预览
            ReportPrintTool rpt = new ReportPrintTool(rp);
            if (blnPreview)
            {
                
                rpt.ShowPreview();
                
            }
            else
            {
                rpt.Print();
            }
        }
DataSet ds = PrintData();
Print(ds,true);
  1. list转换table

        private DataTable ToDataTable<T>(List<T> items)

        {

            var tb = new DataTable(typeof(T).Name);
            PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in props)
            {
                Type t = GetCoreType(prop.PropertyType);
                tb.Columns.Add(prop.Name, t);
            }
            foreach (T item in items)
            {
                var values = new object[props.Length];
                for (int i = 0; i < props.Length; i++)
                {
                    values[i] = props[i].GetValue(item, null);
                }
                tb.Rows.Add(values);
            }
            return tb;
        }

        public static bool IsNullable(Type t)
        {
            return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值