Я работаю над огромным, старым проектом с большим количеством хрупкого кода, некоторые из которых существовали со времен .NET 1.0, и над ним работали и будут работать другие люди ... так что я хотел бы изменить как можно меньше.
У меня есть один проект в моем решении, который содержит DataSet.xsd. Этот проект компилируется в отдельную сборку (Data.dll). Схема базы данных включает в себя несколько таблиц, расположенных более или менее иерархически, но единственный способ на самом деле связать таблицы - это объединение. Я могу получить, например DepartmentRow
и EmployeeRow
объекты из автоматически сгенерированного кода. EmployeeRow
содержит информацию от соответствующего сотрудника DepartmentRow
через объединение.
Я делаю новый отчет для просмотра нескольких отделов и всех их сотрудников. Если я использую существующую схему доступа к данным, все, что я смогу получить, это вывод в виде электронной таблицы, где каждый сотрудник представлен в одной строке, а информация об отделе повторяется снова и снова в соответствующих столбцах. E.g.:
Department1...Employee1...
Department1...Employee2...
Department2...Employee3...
Но клиент хотел бы, чтобы каждый отдел отображался как заголовок со списком сотрудников под каждым. E.g.:
- Department1...
Employee1...
Employee2...
+ Department2...
Я пытаюсь сделать это, унаследовав иерархические объекты от автоматически сгенерированных объектов Row. E.g.:
public class Department : DataSet.DepartmentRow {
public List<Employee> Employees;
}
Таким образом, я мог бы вкладывать данные в отчет, используя набор объектов Department в качестве источника данных, каждый из которых помещал бы свой список сотрудников в подотчет.
Проблема в том, что это дает мне ошибку The type Data.DataSet.DepartmentRow has no constructors defined
. И когда я пытаюсь создать конструктор, например,
public class Department : DataSet.DepartmentRow {
private Department() { }
public List<Employee> Employees;
}
В дополнение к первой появляется ошибка 'Data.DataSet.DepartmentRow(System.Data.DataRowBuilder)' is inaccessible due to its protection level.
.
Есть ли способ выполнить то, что я пытаюсь сделать? Или я должен попробовать что-то еще?