水晶报表打印全部数据

下面是我学习的对打印水晶报表的总结
首先要先安装水晶报表软件,然后在视图层写
function 自定义名()
{
//然后再获取页面数据
//获取查询条件
var 自定义id名= $("#id ").val();
……
//判断是否有数据
if (自定义id名 == “” || 自定义id名 == undefined) {
自定义id名 = 0;
}
//然后这里输出一下
layer.confirm(“判断语句,判断用户是否打印”, { icon: 3, title: “提示” }, function (layIndex) {
layer.close(layIndex);
window.open("控制器写的自定义方法名名?参数);
});
}
然后再在这个区域里右键新建一个文件夹
然后再右键这个文件夹添加一个新建项,如图
水晶报表打印全部数据_第1张图片
然后再选择到数据,接着选择到数据集然后添加成功,如图
水晶报表打印全部数据_第2张图片
然后点击到它右键添加一个数据源
水晶报表打印全部数据_第3张图片
如果数据库有这个表就选第一个TableAdapter,如果数据库没有这个表就选第二个DataTable自己设计里面的字段,然后右键添加列添加你要用到的字段,然后右键字段选到属性,看一下你每个字段的数据类型正不正确,注意这步很重要,不然后面出错很难找,然后设计好后保存。如下为我设计好的表
水晶报表打印全部数据_第4张图片
然后再在文件夹右键添加新建项添加水晶报表,如图
水晶报表打印全部数据_第5张图片
只要你安装了水晶报表就会有这个,添加成功后它会弹出下图,然后选择到作为空白报表
水晶报表打印全部数据_第6张图片
然后在画模板之前在它右侧有个数据库字段,右键点击到数据库专家,
在这里插入图片描述
然后再找到刚才设计的表双击它确定就会在右边显示,如下图
水晶报表打印全部数据_第7张图片
确定后再打开左边的字段就会看到你设计表里面的字段,然后你可以点击字段用鼠标拖动把你的字段拉到表里面来,然后通过右键来设计你想要到的样式,如下图为我画好的表
水晶报表打印全部数据_第8张图片
画完表之后就到控制器写打印水晶报表
写之前调用一个方法,直接复制粘贴就可以用,如下

    // 将IEnumerable类型的集合转换为DataTable类型        
    public DataTable LINQToDataTable(IEnumerable varlist) { 
        //定义要返回的DataTable对象
        DataTable dtReturn = new DataTable();
        //保存列集合的属性信息数组
        PropertyInfo[] oProps = null;
        if (varlist == null)
            return dtReturn;//安全性检查
        //循环遍历集合,使用反射获取类型的属性信息
        foreach (T rec in varlist)
        {
            //使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
            if (oProps == null)
            {
                oProps = ((Type)rec.GetType()).GetProperties();
                //循环PropertyInfo数组
                foreach (PropertyInfo pi in oProps)
                { //得到属性的类型
                    Type colType = pi.PropertyType;
                    //如果属性为泛型类型
                    if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                    { //获取泛型类型的参数
                        colType = colType.GetGenericArguments()[0]; } 
                    //将类型的属性名称与属性类型作为DataTable的列数据
                    dtReturn.Columns.Add(pi.Name, colType); } }
            //新建一个用于添加到DataTable中的DataRow对象
            DataRow dr = dtReturn.NewRow();
            //循环遍历属性集合
            foreach (PropertyInfo pi in oProps) { 
                //为DataRow中的指定列赋值
                dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null); } 
            //将具有结果值的DataRow添加到DataTable集合中
            dtReturn.Rows.Add(dr); } 
        return dtReturn;//返回DataTable对象} 

然后这里接着写打印方法,首先写个查询
public ActionResult PrintAuxiliary(int ClusterID, int UserID) {
List linqAuxiliary = (from tbUser in myModel.S_User
join tbCluster in myModel.B_Cluster on tbUser.ClusterID equals tbCluster.ClusterID
join tbAuxiliary in myModel.B_Auxiliary on tbUser.AuxiliaryID equals tbAuxiliary.AuxiliaryID
select new AuxiliaryVo{
UserID = tbUser.UserID,//用户id
UserName = tbUser.UserName,//用户名称
……
FoundTime = tbAuxiliary.FoundTime.ToString()//创建时间
}).ToList();
if (ClusterID > 0)//聚类包id
{linqAuxiliary = linqAuxiliary.Where(m => m.ClusterID == ClusterID).ToList();}
if (UserID > 0)//用户id
{linqAuxiliary = linqAuxiliary.Where(m => m.UserID == UserID).ToList();}
//然后接着将查询出来的数据转化为DataTable的格式
DataTable dtAuxiliary = LINQToDataTable(linqAuxiliary);
//然后实例化数据集,StampPebble是方你设计的表的数据集名,PebbleReport是你设计的表名
StampPebble.PebbleReport dbAuxiliary = new StampPebble.PebbleReport(); //然后将自定义格式名放入自己创建的数据集的表格中,tbAuxiliary是你设计的表头名
dbAuxiliary.Tables[“tbAuxiliary”].Merge(dtAuxiliary);
//然后实例化数据报表,AuxiliaryReport是你画好的表
StampPebble.AuxiliaryReport rp = new StampPebble.AuxiliaryReport();
//然后获取报表的物理文件路径,Areas放你所有区域的文件夹,PartitionClaim区域文件夹名,StampPebble放数据集和你画的表的文件夹名,AuxiliaryReport你画的表名
string strRpPath = Server.MapPath("~/") + “Areas\PartitionClaim\StampPebble\AuxiliaryReport.rpt”;
rp.Load(strRpPath); //将报表加载到报表模板中
rp.SetDataSource(dbAuxiliary); //设置报表的数据源
//将报表转化为文件流输出
Stream dbStream = rp.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
return File(dbStream, “application/pdf”);}
这下打印就做完了,下面打印演示一遍,点击打印本页就打印了所有的数据
水晶报表打印全部数据_第9张图片
水晶报表打印全部数据_第10张图片

你可能感兴趣的:(水晶报表打印全部数据)