为什么 CrystalReports 会跳过组内的记录?
Why is CrystalReports skipping records within Groups?
我设计了一个简单的CrystalReports。
屏幕截图:
我在表单加载中填写DataSet
protected override void OnLoad(EventArgs e)
{
CrystalReport2 report = new CrystalReport2();
DataSet data = GetData();
report.SummaryInfo.ReportTitle = "My Company Billing Report";
report.SetDataSource(data);
DateTime startTime = new DateTime(2015, 10, 1);
Debug.WriteLine("Start Time: " + startTime);
DateTime endTime = startTime.AddMonths(1);
Debug.WriteLine("End Time: " + endTime);
report.SetParameterValue("StartTime", startTime);
report.SetParameterValue("EndTime", endTime);
crystalReportViewer1.ReportSource = report;
//crystalReportViewer1.Refresh();
base.OnLoad(e);
}
private static DataSet GetData()
{
string connectString = ConfigurationManager.ConnectionStrings["TimeSheetContext"].ConnectionString;
SqlConnection connection = new SqlConnection {ConnectionString = connectString};
SqlCommand sqlCmd = new SqlCommand
{
CommandType = CommandType.Text,
Connection = connection,
CommandText = "SELECT * FROM tblTimeWorked ORDER BY Link2Customer, Link2Worker, DateWorked, Location"
};
BillingDataSet ds = new BillingDataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlCmd);
int blah = da.Fill(dataSet: ds, srcTable: "tblTimeWorked");
Debug.WriteLine("# of TimeWorked Records: " + blah);
sqlCmd.CommandText = "SELECT * FROM tblActivity";
da = new SqlDataAdapter(sqlCmd);
blah = da.Fill(dataSet: ds, srcTable: "tblActivity");
Debug.WriteLine("# of Activity Records: " + blah);
sqlCmd.CommandText = "SELECT * FROM tblCustomer";
da = new SqlDataAdapter(sqlCmd);
blah = da.Fill(dataSet: ds, srcTable: "tblCustomer");
Debug.WriteLine("# of Customer Records: " + blah);
sqlCmd.CommandText = "SELECT * FROM tblWorker";
da = new SqlDataAdapter(sqlCmd);
blah = da.Fill(dataSet: ds, srcTable: "tblWorker");
Debug.WriteLine("# of Worker Records: " + blah);
return ds;
}
格式是我想要的,但好像少了一些条目。在我看来,只有第一人称(工人)被选中,其他人 none。我在 CrystalReports 中按客户分组然后按员工分组。我不做任何过滤填充数据集。我用 Sql Server Management Studio 验证了记录。
记录选择是:
{tblTimeWorked.DateWorked} >= {?StartTime} and {tblTimeWorked.EndTime} < {?EndTime} and {tblTimeWorked.Link2Activity} = 2
为什么 CrystalReports 会跳过组内的记录?
我要尝试的第一件事是从 Crystal 报告和 运行 报告中删除 Group1 和 Group2,只是为了确认 crystal 报告确实包含所有您期望的详细信息行。此外(也许更重要的是),在报告中包含多个数据集似乎很奇怪。只需修改您的第一个 CommandText 以包含拉取您需要的其他链接字段(例如客户姓名、员工姓名)所需的联接。这将简化事情。
我设计了一个简单的CrystalReports。 屏幕截图:
我在表单加载中填写DataSet
protected override void OnLoad(EventArgs e)
{
CrystalReport2 report = new CrystalReport2();
DataSet data = GetData();
report.SummaryInfo.ReportTitle = "My Company Billing Report";
report.SetDataSource(data);
DateTime startTime = new DateTime(2015, 10, 1);
Debug.WriteLine("Start Time: " + startTime);
DateTime endTime = startTime.AddMonths(1);
Debug.WriteLine("End Time: " + endTime);
report.SetParameterValue("StartTime", startTime);
report.SetParameterValue("EndTime", endTime);
crystalReportViewer1.ReportSource = report;
//crystalReportViewer1.Refresh();
base.OnLoad(e);
}
private static DataSet GetData()
{
string connectString = ConfigurationManager.ConnectionStrings["TimeSheetContext"].ConnectionString;
SqlConnection connection = new SqlConnection {ConnectionString = connectString};
SqlCommand sqlCmd = new SqlCommand
{
CommandType = CommandType.Text,
Connection = connection,
CommandText = "SELECT * FROM tblTimeWorked ORDER BY Link2Customer, Link2Worker, DateWorked, Location"
};
BillingDataSet ds = new BillingDataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlCmd);
int blah = da.Fill(dataSet: ds, srcTable: "tblTimeWorked");
Debug.WriteLine("# of TimeWorked Records: " + blah);
sqlCmd.CommandText = "SELECT * FROM tblActivity";
da = new SqlDataAdapter(sqlCmd);
blah = da.Fill(dataSet: ds, srcTable: "tblActivity");
Debug.WriteLine("# of Activity Records: " + blah);
sqlCmd.CommandText = "SELECT * FROM tblCustomer";
da = new SqlDataAdapter(sqlCmd);
blah = da.Fill(dataSet: ds, srcTable: "tblCustomer");
Debug.WriteLine("# of Customer Records: " + blah);
sqlCmd.CommandText = "SELECT * FROM tblWorker";
da = new SqlDataAdapter(sqlCmd);
blah = da.Fill(dataSet: ds, srcTable: "tblWorker");
Debug.WriteLine("# of Worker Records: " + blah);
return ds;
}
格式是我想要的,但好像少了一些条目。在我看来,只有第一人称(工人)被选中,其他人 none。我在 CrystalReports 中按客户分组然后按员工分组。我不做任何过滤填充数据集。我用 Sql Server Management Studio 验证了记录。
记录选择是:
{tblTimeWorked.DateWorked} >= {?StartTime} and {tblTimeWorked.EndTime} < {?EndTime} and {tblTimeWorked.Link2Activity} = 2
为什么 CrystalReports 会跳过组内的记录?
我要尝试的第一件事是从 Crystal 报告和 运行 报告中删除 Group1 和 Group2,只是为了确认 crystal 报告确实包含所有您期望的详细信息行。此外(也许更重要的是),在报告中包含多个数据集似乎很奇怪。只需修改您的第一个 CommandText 以包含拉取您需要的其他链接字段(例如客户姓名、员工姓名)所需的联接。这将简化事情。