tycarlos123 Ответов: 1

Проблема с отображением того же списка уровней, что и список, который был сгруппирован в crystalreport


У меня возникли проблемы с отображением того же списка уровней, что и список, который был групповым. Здесь я постараюсь объяснить наиболее легко

Мои данные таковы:
Driver
{
0_Code: 01 | Name: A | Salary: 1000
1_Code: 02 | Name: B | Salary: 2000
}
Travel
{
0_DriverC: 01 | Name: A | Salary: 1000 | Date: 5/2 | Route: ABC 
1_DriverC: 01 | Name: A | Salary: 1000 | Date: 7/2 | Route: XYZ
2_DriverC: 02 | Name: B | Salary: 2000 | Date: 1/2 | Route: EFG
}
Expense
{
0_DriverC: 01 | ExpenseN: X | ExpenseMoney: 100
1_DriverC: 01 | ExpenseN: Y | ExpenseMoney: 500
2_DriverC: 01 | ExpenseN: Z | ExpenseMoney: 300
3_DriverC: 02 | ExpenseN: K | ExpenseMoney: 400
}

В CrystalReport я разработал следующее:
Section1(Report Header)
_____________________________
Section2(Page Header)
_____________________________
GroupHeaderSection2(Group Header#1: Travel.DriverC-A)
_____________________________
Section3(Details)
Driver Name: ?Name
?Date    ?DriverC     ?Nane    ?Route   ?Salary
_____________________________
GroupHeaderSection2(Group Footer#1: Travel.DriverC-A)
TotalSalary                                                 Sum of ?Salary
ExpenseN (Here i will list the costs by the Driver group)   ?ExpenseMoney
Total                                             Sum of (?Salary,?ExpenseMoney)

Отчет о результатах, который я хочу, может быть следующим:
Driver Name: A
5/2    01     A     ABC    1000
7/2    01     A     XYZ    1000
TotalSalary                2000
X                          100
Y                          500
Z                          300
Total                      4900
_____________________________
Driver Name: B
1/2    02     B     EFG    2000
TotalSalary                2000
K                          400
Total                      2400

Это код, который присваивает значения DataRow:

var travel = TravelService.GetAllQueryable().ToList();
for(int i = 0; i < travel.Count; i++)
{
    row = dt.NewRow();
    row["Date"] = travel[i].Date;
    row["DriverC"] = travel[i].DriverC;
    row["Nane"] = travel[i].Nane;
    row["Route"] = travel[i].Route;
    row["Salary"] = travel[i].Salary;
    var expense = ExpenseService.Query(p => p.DriverC == travel[i].DriverC).ToList();
    for(int k = 0; k < expense.Count; k++)
    {
       row["ExpenseN"] = expense[k].ExpenseN;
       row["ExpenseMoney"] = expense[k].ExpenseMoney;
    }
    dt.Rows.Add(row);
}


Что я уже пробовал:

Я думаю, что код, присваивающий значение расходам, имеет проблему. Я смущаюсь, когда показываю список одного и того же уровня. Как я могу отобразить список расходов по командировкам, которые были сгруппированы?

1 Ответов

Рейтинг:
2

an0ther1

Я думаю, что вам нужно использовать суб-отчет - я говорю, что думаю, потому что вопрос не совсем ясен.
Я так понимаю, что у вас есть один ко многим присоединиться между водителем и поездками и еще один ко многим между водителем и расходами.
Crystal не позволит вам перечислить и то, и другое в качестве подробного раздела, поэтому вы сделаете следующее;
а) создайте свой отчет, используя разделы, указанные выше (сгруппируйте по водителю, а затем отобразите Путешествие в разделе сведений)
b) добавьте новый раздел сведений (щелкните правой кнопкой мыши на деталях и выберите пункт Вставить раздел ниже)
в) выберите Вставить >> вложенный отчет пункт меню
г) создать отчет по данным расходов
д) установите ссылку на идентификатор водителя - или какую бы то ни было связь между водителем и расходами

с уважением