一般的单据都是由主从关系的,比如部门与人员、单据表头与表身、仓库与存货、分类与档案等等 所以主从关系是报表用的最多的

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 (四) 动态绑定主从关系表的更多相关文章

  1. C# WinfForm 控件之dev报表 XtraReport (八)动态生成报表

    功能说明:生成一个报表文件DV1,保存到本地AA.rep,再重新加载这个文件到DV2 1.布局如下图: panel1 上有三个button panel2上有个documentView dv1 pane ...

  2. C# WinfForm 控件之dev报表 XtraReport(三) 动态数据绑定

    代码还用上一节的,把reportFrx的dataSource去掉.各cell绑定的字段也去掉,有了第二节的基础,现在看这个ms就不难了 无非就是 传到reportFrx一个数据集 在把这个数据集 绑到 ...

  3. C# WinfForm 控件之dev报表 XtraReport (二) 固定数据绑定

    已经子解了XtraReport的初步用法 现在再进一步了解 数据绑定 我们还是先不整高深的 先来个写死的 让我们的数据库数据可以通过报表呈现先 1.准备 还在上节基础上 只不过我把form1 中的Do ...

  4. C# WinfForm 控件之dev报表 XtraReport (一) 初了解

    这个控件其实用法和fast也差不了太多但如果没接触过 真有种老虎吃天的感觉 1.这里先不说那些高深的先说最基本的 在窗体中显示一个设计好的 模版 1.1一般设计和这个程序是分着的为了方便我就先把他们合 ...

  5. C# WinfForm 控件之dev报表 XtraReport (七)报表合并

    这个不是太难,新建两个报表 一个form窗体 窗体上放个documentView  代码如下 XtraReport2 xr2 = new XtraReport2(); xr2.CreateDocume ...

  6. C# WinfForm 控件之dev报表 XtraReport (五) 并排报表

    有了前边的基础这个就很简单了,建一个容器报表 在detail,上放两个xrsubReport.再做两个明细报表,分别指定到xrsubreport就可以了

  7. C# WinfForm 控件之dev图表 ChartControl

    dev 图表控件 学习连接 新建一个winformApp form1上放一个button 再放一个chartControl Name 为cct 直接上代码 private void button1_C ...

  8. C# WinfForm 控件之dev电子表格 SpreadSheet

    网上找了一些资料可是不得入门 只能再回过头来看demos 看了一点 例子大多继承自SpreadsheetRibbonTutorialControlBase 这个类,它又继承自SpreadSheetTu ...

  9. C# WinfForm 控件之dev表格 GridControl

    基本用法 1.新建一个winformAPP 放一个gridControl 为gridC 再放一个button 用法与dataGrid一样 代码如下: /// <summary> /// 显 ...

随机推荐

  1. img点击放大的js实现

    业务需要,从后台获取图片列表,用img标签展示,由于图片太小看不清,需要点击放大,类似如下效果: 点击后放大(由于图片高度超出了页面,需要通过overflow:auto;设置滚动条,点击放大图片回到列 ...

  2. 【牛客网-剑指offer】旋转数组的最小数字

    题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  3. 微信小程序の模板

    一.什么是模板 模板顾名思义就是可以复用的代码块.减少编码工作量. 二.例子 <template name="templateTest"> <view>th ...

  4. OC开发系列-内存管理

    概述 移动设备的内存极其有限,每个app所有占用的内存是有限的.当app所占用的内存比较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间. 任何集成了NSObject的对象都需要手动进行 ...

  5. WiFi基础知识

    自从只需少量的话费就可以将笔记本.平板电脑连接到互联网,WiFi已成为我们熟知的网络,并无处不在.Wi-Fi对于一些物联网应用十分有用,比如楼宇自动化.内部能源管理.WiFi的重要性对于我们的日常生活 ...

  6. Windows虚拟机共享公司网络给Linux host

    前两天写了一个Linux主机通过windows虚拟机上网的随笔,实话说功能有点弱,比如22端口的转发都没有.实际上还有一个更简单且功能更强的共享方法(不需要安装ccproxy). https://ww ...

  7. 【JZOJ1914】【BZOJ2125】最短路

    description 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. analysis 建出圆方树后,可以知道仙人掌上每一个方点连着的边双其实就是 ...

  8. 遍历实例化swiper

    var list = $('.p04-s2 li'); list.each(function (index) { new Swiper ($(this).find('.swiper-container ...

  9. 【转】让应用程序支持emoji字符

    什么是emoji?就是这些表情和符号:

  10. vue基础三

    1.模板语法 在底层的实现上, Vue 将模板编译成虚拟 DOM 渲染函数.如果你熟悉虚拟 DOM 并且偏爱 JavaScript 的原始力量,你也可以不用模板,直接写渲染(render)函数,使用可 ...