rdlc报表随笔心得 ,基本结构和一些表达式。
Dataset | Form | RDLC |
主要放数据集的文件夹 | 存放窗体的文件夹 | 存放各种报表的文件夹 |
第一部,创建报表结构
首先添加数据集项
添加完成之后我们会看到这个页面
之后我们在上面添加一些数据集
数据源的连接要自己设定
之后我们可以输入要编译的sql语句,因为是报表,主要用来查询,一般情况只用select语句就可以
生成之后是这样的一些模型
中间的灰色部分可以双击,进去之后我们能自定义编写一些方法
//用这个方法查询时可以进行拼sql拼接查询,一般不写这个的话是不可以拼接查询的
//加粗部分要根据你不同数据集下的小的数据模型名字不同进行变换
partial class MemberTransferShopTableAdapter
{
internal int FillWhere(MC.MemberTransferShopDataTable dataTable, string whereSql, params SqlParameter[] commandParameters)
{
string sql = this.CommandCollection[0].CommandText;
sql = sql.Substring(0, sql.LastIndexOf("WHERE"));
sql += " WHERE 1=1 " + whereSql;
this.CommandCollection[0].CommandText = sql;
this.Adapter.SelectCommand = this.CommandCollection[0];
this.CommandCollection[0].Parameters.Clear();
foreach (SqlParameter p in commandParameters)
{
this.CommandCollection[0].Parameters.Add(p);
}
dataTable.Clear();
int returnValue = this.Adapter.Fill(dataTable);
return returnValue;
}
}
下面展示两种Form中的连接数据的方法
this.MemberTransferShopTableAdapter.Fill(this.cashier.MemberTransferShopDtl, A参数, A参数,A参数); //参数是你写语句时的参数,报表普遍用这种方法
以下是Fillwhere拼接的方法,拼接方法省去了在数据库里判断的过程,可以减少where后查询的判断,从而加快一定速度。
当然如果没有where条件限制查询速度反而会变慢。主要是减少 CASE WHEN THEN 的试用。
string strWhere = "";
if (strClubID != "")
{
strWhere += " ";
}
if (strIsChainStore != "")
{
strWhere += " ";
}
if (strIsAdvanceSale != "")
{
strWhere += " ";
}
strWhere += " ";
this.waterBarCashierPaymentDtlTableAdapter.FillWhere(this.cashier.WaterBarCashierPaymentDtl, strWhere
, new SqlParameter("@ClubID", strClubID)
);
点击数据模型中间灰色部分我们可以看到属性 ,
我们点击其下面的白色部分也可以看到属性
相信所有人都看到了上图的Parameters ,点击他就会出来窗体,如果你where后有参数的话,我们可以在这里面设置他的类型等属性
到此数据集DataSet文件夹的一些基本操作就叙述完毕
二.Form文件夹下窗体的设置
这里面DataSet 和 BindingSource比较重要
首先是Dataset
选择你要连接的数据集,然后将 BindingSource拉倒窗体上,设置 BindingSource
DataSource属性用来选择连接的DataSet数据集
DataMember选中数据集下的模型
之后他们会自动生成一下的东西
这是窗体上应该具备的东西
这是一个外部空间需要引用,具体我还没自己引用过,我做项目时都是人家引用好了的
这里主要是你在rdlc报表中还可以设置参数,主要是用来页面显示的
//查询
private void btnSeach_Click(object sender, EventArgs e)
{
strWhereOne += " ";
strWhereOne += " ";
this.memberChangeOverToShopTableAdapter.FillWhere(this.mc.MemberChangeOverToShop, strWhereOne
, new SqlParameter("@p_AreaID", strAreaID)
, new SqlParameter("@p_ClubID", ClubID));
//// TODO: 这行代码将数据加载到表“mc.MemberChangeOverToShop”中。您可以根据需要移动或删除它。
//this.memberChangeOverToShopTableAdapter.Fill(this.mc.MemberChangeOverToShop,
// strAreaID,
// strClubID);
if (strIsAdvanceSale != "")
{
strWhere += " AND MC_1.IsAdvanceSale=@isAdvanceSale";
}
strWhere += " ";
this.memberTransferShopTableAdapter.FillWhere(this.mc.MemberTransferShop, strWhere
, new SqlParameter("@p_AreaID", strAreaID)
, new SqlParameter("@p_ClubID", ClubID)
);
//// TODO: 这行代码将数据加载到表“mc1.MemberTransferShop”中。您可以根据需要移动或删除它。
//this.memberTransferShopTableAdapter.Fill(this.mc.MemberTransferShop,
// strAreaID,
);
}
catch (Exception ex)
{
if (strIsAdvanceSale != "")
{
strWhereOne += " AND MC_1.IsAdvanceSale=@isAdvanceSale";
}
strWhereOne += " AND (@p_Mobile = @p_Mobile) AND (B.Mobile = (CASE WHEN @p_Mobile = '' THEN B.Mobile ELSE @p_Mobile END))";
this.memberChangeOverToShopTableAdapter.FillWhere(this.mc.MemberChangeOverToShop, strWhereOne
, new SqlParameter("@p_AreaID", strAreaID)
, new SqlParameter("@p_ClubID", ClubID)
);
//// TODO: 这行代码将数据加载到表“mc.MemberChangeOverToShop”中。您可以根据需要移动或删除它。
//this.memberChangeOverToShopTableAdapter.Fill(this.mc.MemberChangeOverToShop,
// strAreaID,
// strClubID,
);
}
this.rv.RefreshReport();
}
三.Rdlc文件夹下报表的创建
我们可以在报表中创建各种图表和数据表
其中最重要就是组,分为父组和子组,从字面意思理解实际上就是父子关系的意思
右键点击表格中的一格 ,我们可以添加组
插入行,列,总计等
同事组又分为行组和列组,从字面意思理解即可
组实际上就是group by ,将数据按组显示
例如省份是父组,市就是子组 ,父组和子组都可以无限创建
分组的不同显示的数据也不同,有时候之所以数据显示的不全,在数据库查看时没问题的情况下,就是没有设置分组或分组不正确。
点击组会有很多属性,大家可以研究一下,最近感觉还没有什么用处
有时候我们常常要给数据加上一些序号这时也与分组有一点关系
=RowNumber("AreaName") //这就是表达式 用来给表添加序号的 按顺序依次往下填的,括号里的名字是你分组的名字。
一般放在最大的区域后面。举个列子,假如你有省最大下面有多个市,我想给多个市前面加上按顺序自动排序的1到9999的数字,那么这个时候我们就在
省后面添加这个表达式就好了
分组实际上海有一个高级模式在列组的右侧
这里插一句常报的错误(真的是随笔,随便写的),,这个一般是你没引用这个Microsoft.SqlServer.Types.dll或者是你的传进报
表的参数和rdlc文件的参数类型不符合等。
类似这种就是报表主要用来显示数据的形式,表蓝色部分偶尔会有一种现象 ,就是第一页的时候他是有的,到第二页第三页就不显示了。这是因为分组的一些问题导致的。
不要让他这个样
大多数要让他这样
具体这里搞的很烦,我的方法就是创建行组的时候小心谨慎将上面标题行,不包含在组里这样他就会一直显示了。
下面显示数据比较重点的就是表达式了
右键点击表格的一格,能打字的状态哦,会出现创建占位符。
创建站位符就是,创建表达式主要用来显示数据。
当然先看这个比较重要 ,报表数据,你要点击一下报表页面才会出现。
右键点击数据集能添加数据源和数据集
参数也同样可以自己添加这里的参数是给页面使用的于前面的
是相对应的。
点击报表的表格我们可以看到DataSetName 属性,选择本表中要连接的数据源
我们继续说表达式
这就是我们的占位符的表达式,他可以进行一些判断和数据类型的转换来显示数据
单机字段就是我们要显示的数据中的个个字段我们可以将他们加入各种列中
运算符合常见函数经常使用
这里我们说几个我经常用的
例如IIF 位置在程序流中
IIF就是三目运算符,真二假三。
Val 用这个转换的原因是我们在计算时警察出线错误,也就是当你显示数据时显示乱码或不显示很大可能是你的表达错误,很大可能是类型的错误。
Reportitems!表格中任意一个格的名字的名字.value主要用来获取表达格子的值方便显示或计算数据
右键点击站位符,会出现站位符属性,我们有时会需要里面数字操作较多,例如让他以百分号形式显示
到这我的报表简单介绍就算结束了,里面可能还有一点点遗漏的,还有更多超多我不懂不会的关于报表的奇葩
错误和一些有用的知识,希望有人看到我这篇文章给一些指点。最好是文字形式的资料,博客园,CSDN等学习
网站的一些资料吧。
确实是随笔,很随意的就写出来。
今晚乌拉圭对法国 我赌乌拉圭赢, 巴西对比利时 我赌巴西赢。
谢谢观赏
rdlc报表随笔心得 ,基本结构和一些表达式。的更多相关文章
- 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载
在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...
- 【机房系统知识小结】微软自带RDLC报表,数据汇总设计
在做机房系统报表的时候,借鉴 八期崔成龙学长的博客< VB.NET rdlc 报表的使用>,照虎画猫的敲了一遍,但是在“汇总项”中,出现了一点小问题. 具体的设计方法在这里就不做介绍了,请 ...
- .Net SSRS(rdlc) 报表经验总结
排版 1. 可以利用表格来布局,以避免调整固定宽度的麻烦. 2. 一个表的表头里还可以嵌套表格. 3. 设置rdlc报表打印格式.首先打开RDLC报表设计器页面.在灰色部分点右键 -> 报表属性 ...
- RDLC报表系列(一) 简单的动态数据绑定和配置
RDLC系列链接 RDLC报表系列(一) 简单的动态数据绑定和配置 RDLC报表系列(二) 行分组 RDLC报表系列(三) 总计和折叠 RDLC报表系列(四) 矩阵 RDLC报表系列(五) 简单的图 ...
- ASP.NET MVC应用程序展示RDLC报表
原文:ASP.NET MVC应用程序展示RDLC报表 学习ASP.NET MVC这样久,在学习,练习与应用过程中,觉得很多知识与以前的ASP.NET多有区别,但是实现操作起来,细处又有许多相近的地方. ...
- 微软RDLC报表打印
关于微软RDLC报表打印时文字拉伸问题(Windows server 2003 sp2) 最近我们开发的打印服务频频出现打印文字拉伸问题,客户意见络绎不绝,最为明显的是使用黑体加粗后 “2.0份” 打 ...
- 水晶报表,快速报表,rdlc报表
感觉自己脑子里只剩下报表了,o(╥﹏╥)o.因为最近新换了公司,业务上有需要报表打印,水晶报表,快速报表,rdlc报表这三种以后可能都会用到.所以在没了解好业务流程,熟悉代码之前,就是看看这三种报表怎 ...
- 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”
问题:关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出” 办法:在容纳ReportViewer的窗体后台代码中,添加如下代码即可 protected override ...
- rdlc报表DEMO
rdlc报表demo .net 4.0 vs2013 文本框,图像控件,checkbox样式的打印 下载链接
随机推荐
- Spring Boot—07应用application.properties中的配置
方法1 @Value("${test.msg}") private String msg; 方法2 @Autowired private Environment env; Stri ...
- linux 根据进程名杀死进程 -kill进程名
前两天一个老师给我出了一个linux操作上的问题,现在知道进程名怎样杀死这个进程.或许很多人都会和我一样说用 #pkill 进程名 或是 #killall 进程名 的确这个两个命令都能做到这些,而且我 ...
- Dialog向Activity传递数据
PopupDialog中声明一个内部接口PriorityListener,接口中声明一个回调函数refreshPriorityUI,用于在 Dialog的监听事件触发后刷新Activity的UI显示. ...
- C语言图形编程
四.图形和图像函数(一) 像素函数 56. putpiel() 画像素点函数 57. getpixel()返回像素色函数(二) 直线和线型函数 58. line() 画线函数 ...
- PRINCE2是什么?
PRINCE是PRoject IN Controlled Environment(受控环境下的项目管理)的简称. PRINCE2描述了如何以一种逻辑性的.有组织的方法,按照明确的步骤对项目进行管理. ...
- PyQt4(简单布局)
import sys from PyQt4 import QtCore, QtGui app = QtGui.QApplication(sys.argv) widget = QtGui.QWidget ...
- 【Redis】命令学习笔记——字符串(String)(23个超全字典版)
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 本篇基于redis 4.0.11版本,学习字符串( ...
- Linux /dev/null详解
常用的命令展示 /dev/null 和 /dev/zero的区别 1./dev/null:表示 的是一个黑洞,通常用于丢弃不需要的数据输出, 或者用于输入流的空文件 ...
- IIS 7 反向代理 URL重写 转发动态请求
一.反向代理是什么 有一篇文章说的挺好的 Nginx 反向代理.负载均衡.页面缓存.URL重写及读写分离详解 http://www.server110.com/nginx/201402/5534.ht ...
- Hadoop HBase概念学习系列之RowKey设计(二十九)
HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.