C# WinfForm 控件之dev报表 XtraReport (四) 动态绑定主从关系表
一般的单据都是由主从关系的,比如部门与人员、单据表头与表身、仓库与存货、分类与档案等等 所以主从关系是报表用的最多的
1.准备数据库 简单方便
--主表
create table RdRecord
(
id int primary key identity(1,1),
BillCode nvarchar(32) unique not null,
BillVenOrCus nvarchar(64),
BillDate datetime default (getDate())
) --从表
create table rdrecords
(autoid int primary key identity(1,1),
id int not null,
InvCode nvarchar(32),
Quantity decimal(18,3) default 0
) insert into rdrecord (BillCode,BillVenOrCus) values('','华为')
insert into rdrecord (BillCode,BillVenOrCus) values('','长虹') insert into rdrecords(id,invCode,Quantity) values(1,'彩电',2000)
insert into rdrecords(id,invCode,Quantity) values(1,'手机',2000)
insert into rdrecords(id,invCode,Quantity) values(1,'手表',2000) insert into rdrecords(id,invCode,Quantity) values(4,'彩电',5000)
insert into rdrecords(id,invCode,Quantity) values(4,'手机',20)
insert into rdrecords(id,invCode,Quantity) values(4,'手表',100)
1.窗体还用上节的form1,报表新建一个ParentAndSonReport 控件有点多 我就用图表示了。 学习来自连接

2 form1 加一个button 一个textBox 双击button2写下代码 查出主从表,并确定关系
private void btnPAndS_Click(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=123;database =test"))
{
DataSet ds = new DataSet();
int iID;
if (int.TryParse(textBox1.Text, out iID))
{
}
else
{ iID = ; } con.Open();
SqlCommand cmd = new SqlCommand("select * from rdrecord --where id =@id "); //可查询单个数据 这个就不说了 这样 主从体现不出来 所以注释掉了
cmd.Connection = con;
cmd.Parameters.Add(new SqlParameter("@id", iID));
SqlDataAdapter ada = new SqlDataAdapter(cmd);
ada.Fill(ds, "RD");//查出 主表 填充 dataset 名为RD cmd = new SqlCommand("select * from rdrecords --where id =@id ");//同上
cmd.Connection = con;
cmd.Parameters.Add(new SqlParameter("@id", iID));
ada = new SqlDataAdapter(cmd);
ada.Fill(ds, "RDS");//细表 同上 //建立主从关系
DataColumn ParentColumn = ds.Tables["Rd"].Columns["ID"];
DataColumn ChildColumn = ds.Tables["Rds"].Columns["id"];
DataRelation rel = new DataRelation("Rel", ParentColumn,ChildColumn);
ds.Relations.Add(rel); ParentAndSonReport psr = new ParentAndSonReport(ds);
documentViewer1.DocumentSource = psr;
psr.CreateDocument();
}
}
3.报表重载构造函数 数据绑定
namespace XtrReportLearn
{
public partial class ParentAndSonReport : DevExpress.XtraReports.UI.XtraReport
{
public ParentAndSonReport()
{
InitializeComponent();
} //重载 最好复制无参构造函数再修改 我总会忘掉初始化
public ParentAndSonReport(DataSet ds)
{
InitializeComponent(); //如果出现 只有一条数据问题那么绑定出问题了 要检查下边的绑定
this.DataSource = ds;
this.DataMember = "RD"; this.DetailReport.DataMember = "Rel";//这个地方一定要是关系的名字 不然 从表数据就全出来了 分不开了
this.DetailReport.DataSource = ds; RDID.DataBindings.Add("Text", ds, "rd.ID");
BillCode.DataBindings.Add("Text", ds, "rd.BillCode");
BillDate.DataBindings.Add("Text", ds, "rd.BillDate"); RDIDs.DataBindings.Add("Text", ds, "Rel.ID");
InvCodoe.DataBindings.Add("Text", ds, "Rel.InvCode");
Quantity.DataBindings.Add("Text", ds, "Rel.Quantity");
}
}
}
是终效果图:

C# WinfForm 控件之dev报表 XtraReport (四) 动态绑定主从关系表的更多相关文章
- C# WinfForm 控件之dev报表 XtraReport (八)动态生成报表
功能说明:生成一个报表文件DV1,保存到本地AA.rep,再重新加载这个文件到DV2 1.布局如下图: panel1 上有三个button panel2上有个documentView dv1 pane ...
- C# WinfForm 控件之dev报表 XtraReport(三) 动态数据绑定
代码还用上一节的,把reportFrx的dataSource去掉.各cell绑定的字段也去掉,有了第二节的基础,现在看这个ms就不难了 无非就是 传到reportFrx一个数据集 在把这个数据集 绑到 ...
- C# WinfForm 控件之dev报表 XtraReport (二) 固定数据绑定
已经子解了XtraReport的初步用法 现在再进一步了解 数据绑定 我们还是先不整高深的 先来个写死的 让我们的数据库数据可以通过报表呈现先 1.准备 还在上节基础上 只不过我把form1 中的Do ...
- C# WinfForm 控件之dev报表 XtraReport (一) 初了解
这个控件其实用法和fast也差不了太多但如果没接触过 真有种老虎吃天的感觉 1.这里先不说那些高深的先说最基本的 在窗体中显示一个设计好的 模版 1.1一般设计和这个程序是分着的为了方便我就先把他们合 ...
- C# WinfForm 控件之dev报表 XtraReport (七)报表合并
这个不是太难,新建两个报表 一个form窗体 窗体上放个documentView 代码如下 XtraReport2 xr2 = new XtraReport2(); xr2.CreateDocume ...
- C# WinfForm 控件之dev报表 XtraReport (五) 并排报表
有了前边的基础这个就很简单了,建一个容器报表 在detail,上放两个xrsubReport.再做两个明细报表,分别指定到xrsubreport就可以了
- C# WinfForm 控件之dev图表 ChartControl
dev 图表控件 学习连接 新建一个winformApp form1上放一个button 再放一个chartControl Name 为cct 直接上代码 private void button1_C ...
- C# WinfForm 控件之dev电子表格 SpreadSheet
网上找了一些资料可是不得入门 只能再回过头来看demos 看了一点 例子大多继承自SpreadsheetRibbonTutorialControlBase 这个类,它又继承自SpreadSheetTu ...
- C# WinfForm 控件之dev表格 GridControl
基本用法 1.新建一个winformAPP 放一个gridControl 为gridC 再放一个button 用法与dataGrid一样 代码如下: /// <summary> /// 显 ...
随机推荐
- mysql 安装运行学习过程中的报错问题
错误记录(windows端): 问题1:在启动MYSQL时出现问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' ...
- java 重新学习 (三)
一.静态初始化块和声明静态成员变量时所指定的初始化值都是该类的初始化代码,他们的执行顺序与源程序中的排列顺序相同. static int a = 9 ; static{ a = 6; } public ...
- 破解Xshell6强制升级
一.背景今天打开xshell时,弹出提示,“要继续使用此程序,您必须应用最新的更新或使用新版本”(如下图) 这是让我强制升级啊,点了确定按钮却提示我已经是最新版了 反正点了半天xshell也没打开.后 ...
- 运维监控篇Zabbix简单的性能调优
Zabbix是一款高性能的分布式监控报警系统.比如现在常见的家用台式机配置处理器I5-3470.内存4GB1600MHz.硬盘7200rpm就能够监控1000台左右的HOST,是的没错Zabbix就是 ...
- Data structure alignment by binary operation
在寫C的過程中,我們會很自然地以為,我連續宣告一堆大小不一的char array. 經過Complier之後這些char array未必是連續擺放.至於為什麼就要談到我們今天的主角了alignment ...
- .net微信扫码支付
今天给大家分享一篇.net的扫码支付文章,话不多说直接进入主题. 如有需要可以加我Q群[308742428]大家一起讨论技术,有偿服务. 后面会不定时为大家更新文章,敬请期待. 喜欢的朋友可以关注下. ...
- 【牛客网-剑指offer】旋转数组的最小数字
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- java全栈商业小程序开发
此次开发只为学习和巩固,第一次学习开发 一.开发前需要了解: 开发框架MVVM.痛点.开源工具.VUE前端框架.微信支付模块.uni-app前端框架.小程序申请.开发工具下载.编写测试小程序.小程序结 ...
- Nginx基础详细讲解
Nginx基础详细讲解 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App,操作更方便哦 1. ...
- 2019南昌邀请赛预选赛 I. Max answer (前缀和+单调栈)
题目:https://nanti.jisuanke.com/t/38228 这题题解参考网上大佬的. 程序的L[i],R[i]代表a[i]这个点的值在区间 [L[i],R[i]] 中最小的并且能拓展到 ...