应用过滤器时,XRSubreport不包含任何数据

时间:2019-03-29 19:48:07

标签: c# winforms xtrareport

我有两个报告,第一个是“ RepGetAsemblyEmployeeForDailyReport”作为主报告,第二个是“ RepDailyAssemblyProductionByEmployee”作为详细报告 在主报告上,我添加了未绑定的明细带,然后将其放到XRSubreport中,并将报告源属性设置为明细report.i遵循此说明 Create a Master-Detail Report with Subreports 这两个报告都将存储过程作为数据源来打开主报告,我使用此代码

private async void DailyProductionByEmployee_Click(object sender, EventArgs e)
    {
        RepGetAsemblyEmployeeForDailyReport reportEmployee = new RepGetAsemblyEmployeeForDailyReport();

        Parameter param1 = new Parameter
        {
            Name = "shifttime",
            Type = typeof(string),
            Visible = false,
            Value = form.cmbShiftTime.EditValue
        };


        Parameter param2 = new Parameter
        {
            Name = "date",
            Type = typeof(DateTime),
            Visible = false,
            Value = Convert.ToDateTime(form.FirstDate.EditValue)//.ToString("MM/dd/yyyy");
        };

        reportEmployee.Parameters.Add(param1);
        reportEmployee.Parameters.Add(param2);

            reportEmployee.DataSource = await assembly.RepGetAsemblyEmployeeForDailyReport(Convert.ToDateTime(form.FirstDate.EditValue).ToString("MM/dd/yyyy"),
                                                                                     Convert.ToInt32(form.cmbShiftTime.EditValue));

            form.Close();
            reportEmployee.ShowRibbonPreviewDialog();
        }

要掌握报告,我使用subreport BeforePrint事件来设置数据源,就像这样

private async void subRepProduction_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
    {

        ((XRSubreport)sender).ReportSource.DataSource = await assembly.RepAssemblyDailyProductionShiftTimeByEmployee(Convert.ToDateTime(Parameters[1].Value).ToString("MM/dd/yyyy"),
                                                                         Convert.ToInt32(Parameters[0].Value));
    }

现在,如果我应用过滤器,则不会获得任何数据 enter image description here 但是当我清除过滤器时,某些第一行不显示,然后所有行显示,则仅重复第一行 enter image description here 我要如何解决这个问题,谢谢。 更新:从sql server数据库获取数据的代码

public async Task<DataTable> RepGetAsemblyEmployeeForDailyReport(string DateProduction, int ShiftTime)
    {
        DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
        DataTable dt = new DataTable();
        SqlParameter[] param = new SqlParameter[2];
        param[0] = new SqlParameter("@Date", SqlDbType.NVarChar, 50)
        {
            Value = DateProduction
        };

        param[1] = new SqlParameter("@ShiftTime", SqlDbType.Int)
        {
            Value = ShiftTime
        };

        dt = await DAL.SelectData("RepGetAsemblyEmployeeForDailyReport", param);
        DAL.Close();
        return dt;

    }

1 个答案:

答案 0 :(得分:1)

您不能在此处使用“异步无效”事件处理程序 因为“一劳永逸的做法”。 从“ subRepProduction_BeforePrint”事件处理程序中删除async / await关键字