DataGrid Повторяющиеся данные, которые не должны появляться - PullRequest
0 голосов
/ 30 января 2019

Итак, я сейчас создаю приложение AttendanceApp, используя C# WPF.У меня есть DataGrid, который отображает и рассчитывает показатели посещаемости автоматически из двух файлов, которые взяты из файла посещаемости и фактических журналов посещаемости.

Я попытался сопоставить два файла с помощью UserID, что работает, нокогда я начинаю иметь дело более чем с 1 днем.Я получаю дубликаты и неверные данные.

В настоящее время у меня есть данные за 5 дней только для 2 пользователей, но у пользователя # 1 уже есть 8 списков, когда у него должно быть только 2 за 2 дня посещаемости

Дубликаты записей DataGrid View1

Но если данных достаточно только на 1 день, данные выглядят корректными

OneДневная посещаемость DataGrid View2

Итак, у меня есть дубликаты и ошибочные данные на моем DataGrid

Вот мои источники данных

Расписание сотрудников

Employee Schedule

Журналы посещаемости сотрудников

Employee Attendance Logs

И это мой код, который я использую для заполнения DataGrid

public void Main()
        {
            List<Emp1> emps;
            List<Actual> actuals;

            actuals = emp.GetActual(@"C:\Users\IT\Desktop\Sample\SampleActual.dat");
            emps = GetEmpSched();



            var final = (from a1 in actuals
                         join a2 in actuals on a1.ID equals a2.ID
                         join t1 in emps on a1.ID equals t1.ID
                         join t2 in emps on a2.ID equals t2.ID
                         where (a1.LogStatus == 0) && (a2.LogStatus == 1)
                         select new
                         {
                             User_ID = t1.ID,
                             Scheduled_In = t1.In,
                             Actual_Login = a1.ActualLog,
                             Scheduled_Out = t2.Out,
                             Actual_Out = a2.ActualLog
                         }).Distinct(). ToList();

            tbContainer = StaticClasses.ToDataTable(final);

            dgvAttendance.ItemsSource = emp.CalculateEmployeeAttendance(tbContainer);
        }

Как видите, я добавил Distinct(), чтобы попытаться отфильтроватьout, если это работает.

Журналы посещаемости работают так, как если бы его ноль был временем входа, а если его - один - временем ожидания.

, поэтому я объявил emps дважды для фильтрациичто все LogStatus == 0 будетдля фактического времени, а Logstatus == 1 для фактического времени.

Любые идеи будут полезны.

1 Ответ

0 голосов
/ 30 января 2019

Дублирование происходит потому, что вы объединяете таблицы, основываясь только на идентификаторах пользователей.Ваш код не имеет возможности дифференцировать их по дате.Вот почему таблица расписания вашего первого дня объединяется с фактическим временем вашего первого дня и данными второго дня.Завтра, когда у вас будет другой набор фактов, каждый ряд будет повторяться три раза.

Чтобы исправить это, добавьте еще одно поле в обе таблицы, в котором будет указана дата (дата, месяц, год), затем при объединении учитывайте это поле тоже

...