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

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. html 局部打印

    首先有个调用的方法.printView(). function printView() { bdhtml = window.document.body.innerHTML;//获取当前页的html代码 ...

  2. 执行sudo apt-get update报错

    1.在官网源https://mirrors.ustc.edu.cn/repogen/下载对应版本最新的源,比如我是16.04版本的ubuntu,对应下载的是这个 2.下载sources.list完成之 ...

  3. Jackson读取列表

    List<MyBean> result = mapper.readValue(src, TypeFactory.collectionType(ArrayList.class, MyBean ...

  4. Selenium3 + Python3自动化测试系列十二——窗口截图与关闭浏览器

    窗口截图 自动化用例是由程序去执行的,因此有时候打印的错误信息并不十分明确.如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片就可以非常直观地看出出错的原因.WebDriver提供了截图函数g ...

  5. Pytest---yield

    场景:你已经可以将测试方法前要执行的或依赖的解决了,测试 方法后销毁清除数据的要如何进行呢?范围是模块级别的.类似 setupClass 解决:通过在同一模块中加入 yield关键字,yield是调用 ...

  6. 防御 CSRF

    我还针对这个问题请教了 @c4605 , 他对防御 CSRF 提出了两种解决方案: 在每个表单中包含一个 CSRF Token.不将用于认证的 Token 或 Seesion ID 储存在 Cooki ...

  7. live555库得编译、移植、应用

    一.ubuntu下编译 1.生成Makefile文件,编译 ./genMakefiles linux make 2.拷贝liveMedia/include,groupsock/include,Basi ...

  8. tac - 反转显示文件

    总览 (SYNOPSIS) ../src/tac [OPTION]... [FILE]... 描述 (DESCRIPTION) 把 每个 文件 FILE 显示在 标准输出, 后面 的 行 放在 前面. ...

  9. Nginx反向代理与负载均衡应用实践(二)

    Nginx反向代理与负载均衡应用实践(二) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...

  10. io.File+递归

    import java.io.File ; import java.io.IOException ; public class FileDemo11{ public static void main( ...