由于项目习惯将数据组成一个对象list,在遇到xtraReport打印时,经常需要将list转成datatable,特此记录一下
- 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);
- 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<>));
}