C# WinfForm 控件之dev报表 XtraReport (四) 动态绑定主从关系表

本文介绍了一种基于主从表关系的报表设计方法,通过创建SQL数据库表并使用C#进行数据绑定,实现了主从表的数据展示。文章详细介绍了如何构建主从表关系以及如何在报表中正确显示这些数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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('001','华为')
insert into rdrecord (BillCode,BillVenOrCus) values('002','长虹')

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 = 0; }

                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");
        }
    }
}

 是终效果图:

 

转载于:https://www.cnblogs.com/SoftWareIe/p/8805688.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值