简体   繁体   English

如何在水晶报表中为主明细表设置子报表的数据源

[英]How to set datasource of sub report in crystal report for master detail table

在此处输入图片说明

I've these two tables, I want to generate a crystal report in which I've a sub report listing all the orders by store. 我有这两个表,我想生成一个水晶报表,其中有一个子报表,按商店列出了所有订单。 But I'm having problem setting data source of sub report. 但是我在设置子报表的数据源时遇到问题。

ReportsDataSetTableAdapters.StoreTableAdapter adp = new ReportsDataSetTableAdapters.StoreTableAdapter();
MainOrderReport report = new MainOrderReport();
ReportsDataSetTableAdapters.OrderTableAdapter del = new ReportsDataSetTableAdapters.OrderTableAdapter();
report.Subreports[0].SetDataSource(del.GetData().DefaultView);
report.SetDataSource(adp.GetData().DefaultView);
crystalReportViewer.ReportSource = report;
crystalReportViewer.Refresh();

But this code is throwing this exception: "Failed to enable constraints. One or more rows contain values violating non-null, unique or foreign-key constraints". 但是此代码引发了以下异常:“未能启用约束。一个或多个行包含违反非空,唯一或外键约束的值”。 Kindly help me, what I'm missing here. 请帮助我,我在这里想念的东西。

Try clearing the connection first: 尝试先清除连接:

report.Subreports[0].DataSourceConnections.Clear();
report.Subreports[0].SetDataSource(adp.GetData().DefaultView);
crystalReportViewer1.ReportSource = report;
crystalReportViewer1.Refresh();

As per your given DataSet image, your OrderDataTable is child of StoreDataTable . 根据给定的DataSet图像,您的OrderDataTableStoreDataTable子级。 While in your code you are filling your child first and parent later. 在编写代码时,您要先填充孩子,然后再填充父母。 And in your DataSet you have defined a constraint between the two tables. 并且在您的DataSet您已经定义了两个表之间的约束。

Probably this is the reason why you are getting this error. 可能这就是您收到此错误的原因。 Try filling the parent Table first, then child Table. 尝试先填充父表,然后再填充子表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM