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

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. CentOS MySQL 5.7编译安装

    CentOS MySQL 5.7编译安装 MySQL 5.7 GA版本的发布,也就是说从现在开始5.7已经可以在生产环境中使用,有任何问题官方都将立刻修复. MySQL 5.7主要特性: 更好的性能: ...

  2. UVALive 4794 Sharing Chocolate

    Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world ever ...

  3. react 小技巧

    1.当从redux里异步获取数据时,在render里渲染dom会出现数据还未获取到的情况,这时可以用 usableSchemas.data.vertexes && usableSche ...

  4. Recycleview点击事件监听器(转自:http://www.jianshu.com/p/f2e0463e5aef)

    package com.taven.uav.view; import android.content.Context;import android.support.v7.widget.Recycler ...

  5. 08-03-re-模块

    一组特殊符号组成的表达式,用于描述某种规则.该应用场景生活中随处可见. ​ 例如:让有志青年过上体面的生活,这里面就由规则,即有志青年. 正则表达式的作用,以及使用场景 ​ 1.用于从字符串中匹配满足 ...

  6. Tool ALL Framework

    //https://www.cnblogs.com/jiftle/p/10895260.html C++ 资源大全 关于 C++ 框架.库和资源的一些汇总列表,内容包括:标准库.Web应用框架.人工智 ...

  7. Delphi COM对象

    作者:巴哈姆特  http://www.cnpack.org(转载请注明出处并保持完整) 如果没有接触过COM对象的话,你会觉得接口真的很麻烦,也许会有:“还不如直接定义一个类更方便”的想法. 的确, ...

  8. pro、pre、test、dev环境

    开发过程中四个环境分别是:pro.pre.test.dev环境,中文名字:生产环境.灰度环境.测试环境.开发环境 环境介绍: pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境. ...

  9. PHP FILTER_SANITIZE_EMAIL 过滤器

    定义和用法 FILTER_SANITIZE_EMAIL 过滤器删除字符串中所有非法的 e-mail 字符. 该过滤器允许所有的字母.数字以及 $-_.+!*'{}|^~[]`#%/?@&= N ...

  10. PHP ftp_fput() 函数

    定义和用法 ftp_fput() 函数上传本地一个已经打开的文件,并在 FTP 服务器上把它保存为一个文件. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_fput(f ...