Отчет XRSubreport не содержит никаких данных при применении фильтра - PullRequest
0 голосов
/ 29 марта 2019

У меня есть два отчета: первый 'RepGetAsemblyEmployeeForDailyReport' как основной отчет и второй 'RepDailyAssemblyProductionByEmployee' как подробный отчет В основной отчет я добавил несвязанную полосу подробностей и вставил в нее XRSubreport и установил свойства источника отчета для подробного отчета. Я следовал этой инструкции Создание отчета с основными данными с подотчетами в обоих отчетах хранится процедура в качестве источника данных для открытия основного отчета. Я использую этот код

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

для генерации отчета я использую событие подотчета 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

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 Ответ

1 голос
/ 01 апреля 2019

вы не можете использовать здесь обработчики событий async void из-за подхода «огонь и забыть».удалить ключевые слова async / await из обработчика событий "subRepProduction_BeforePrint"

...