开发工具与关键技术:wpf
作者:龙文浩
撰写时间:2019年5月11日
Wpf制作水晶报表,需要:
两个插件(sapbusinessobjects.wpf.viewer.dll和SAPBusinessObjects.WPF.ViewerShared.dll)
一个水晶报表:.rpt
一个数据集:.xsd
一个窗体:*****.xaml
在客户端添加引用:
我们需要先准备一个数据集:
新建好数据集之后,我们再往数据集里面添加上我们的表:
点击鼠标右键,添加”DataTable”,然后在表里面,右键“添加列”,然后每一列的数据类型需要跟数据来源的数据类型对应:
如果全部都不修改数据类型,默认的数据类型都是string,可以通过选中一条数据,右键,选择“属性”,在属性里面修改数据类型:点击黑色区域的地方可以选中当前数据:
然后新建水晶报表制作报表:
我们选择“第二项 作为空白报表”:
然后在报表中制作报表的样式,
然后打开“字段资源管理器”,在找到“数据库字段”,找到对应的的数据集:
往报表中添加数据,从数据库专家直接选中拖到报表中即可:
然后新建一个窗体,在窗体中显示报表:
窗体中,需要引用先前在项目中增加的引用,
给它一个自定义名字,根据名字调用出它里面的控件:
接着去获取数据,在窗体中,设置了加载事件:加载事件中已将一条数据传输过来了:
使用了DataRowView来接收数据,然后把数据提取出来:
int staff_id = Convert.ToInt32(dataRow.Row[“staff_id”]);
string strPath = dbs.Click_SelectAppDomain()
+ “image\”
+ dataRow.Row[“picture”].ToString();
var bytes = new byte[0];
if (File.Exists(strPath))
{
FileStream arrayFile = new FileStream(strPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
bytes = new byte[arrayFile.Length];
arrayFile.Read(bytes, 0, bytes.Length);
}
string staff_number = dataRow.Row[“staff_number”].ToString();
string staff_name = dataRow.Row[“staff_name”].ToString();
string branch = dataRow.Row[“branch”].ToString();
string employee_type = dataRow.Row[“employee_type”].ToString();
然后声明一个临时的DataTable; 创建好,表的行和列:
DataTable dataTable = new DataTable();
DataRow dataTable_Row = dataTable.NewRow();
dataTable.Columns.Add(“picture”, typeof(byte[]));
dataTable_Row[“picture”] = bytes;
dataTable.Columns.Add(“staff_number”, typeof(string));
dataTable_Row[“staff_number”] = dataRow.Row[“staff_number”].ToString();
dataTable.Columns.Add(“staff_name”, typeof(string));
dataTable_Row[“staff_name”] = dataRow.Row[“staff_name”].ToString();
dataTable.Columns.Add(“branch”, typeof(string));
dataTable_Row[“branch”] = dataRow.Row[“branch”].ToString();
dataTable.Columns.Add(“employee_type”, typeof(string));
dataTable_Row[“employee_type”] = dataRow.Row[“employee_type”].ToString();
dataTable.Rows.Add(dataTable_Row);
创建好,表的行和列之后就去赋值:
实例化数据集和实例化水晶报表:
TTS dbTTS = new TTS();
dbTTS.Tables[“t_staff”].Merge(dataTable);
CrystalReport1 dbCRP_Staff = new CrystalReport1();
dbCRP_Staff.SetDataSource(dbTTS);
CRV_Staff.ViewerCore.ReportSource = dbCRP_Staff;
之后,如果没有是4.0以下的版本,会不支持水晶报表,
需要去app.config中设置:useLegacyV2RuntimeActivationPolicy=“true”
最后打印出来的效果图: