为什么 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 以包含拉取您需要的其他链接字段(例如客户姓名、员工姓名)所需的联接。这将简化事情。