Я пытаюсь сделать функцию, которая может извлекать таблицы из моей базы данных, используя имя таблицы. У меня это работает с использованием DataTable, но я бы предпочел использовать ObservableCollection/List, потому что тогда я могу использовать его в ListCollectionView для использования возможностей группировки в DataGrid в WPF.Коллекция неопределенного типа
Однако я столкнулся с проблемой, что функция, которую я создал в моем классе DataManager, должна возвращать коллекции типов diffirent, соответствующих таблице. Как я могу определить ObservableCollection/List, где тип определен при его создании?
Пример функции (это не работает, но может объяснить, что я пытаюсь сделать):
...
public ObservableCollection<object> GetTable(string name)
{
ObservableCollection<object> table = null;
switch (name)
{
case "PriceList":
table = new ObservableCollection<PriceItem>();
//Business logic
break;
case "CustomerTable":
table = new ObservableCollection<Customer>();
//Business logic
break;
}
return table;
}
...
или, может быть,
...
public ObservableCollection<object> GetTable(string name)
{
ObservableCollection<object> table;
switch (name)
{
case "PriceList":
table = getPriceList();
break;
case "CustomerTable":
table = getCustomers();
break;
}
return table;
}
private ObservableCollection<PriceItem> getPriceList()
{
ObservableCollection<PriceItem> table = null;
//Bussiness logic
return table;
}
...
ПРОЕКТ Модифицированный метод (я знаю, что это вероятно, полностью неверно):
public ObservableCollection<T> GetTable<T>()
{
ObservableCollection<T> table = new ObservableCollection<T>();
switch (typeof(T))
{
case "FarrisSeries":
table = new ObservableCollection<FarrisSeries>();
//Business logic
break;
case "FarrisSpecs":
table = new ObservableCollection<object>();
//Business logic
break;
}
return table;
}
Возможный прецедент (я, вероятно, сделал все это неправильно, но все же я попробовал: P)
Situation
---------
Window consists of MenuBar and a DataGrid.
In the menu there is a DropDownButton containing
a menu which contains a list of all table names.
Clicking any button will trigger a command that
will load the table into the DataGrid using the
MenuItem Header as a parameter. The command will
then load the appropriate ObservableCollection
(containing Objects of type related to table name)
into the DataGrid.
Case 1:
- User Clicks "PriceList"
- function LoadTable("PriceList") is called
- function retrieves PriceItems from the database
- function returns ObservableCollection<PriceItem>
- return is stored in the Object bound to the DataGrid
Case 2:
- User Clicks "Customer"
- function LoadTable("Customers") is called
- function retrieves Customers from the database
- function returns ObservableCollection<Customer>
- return is stored in the Object bound to the DataGrid
Невозможно. Представьте свой прецедент, чтобы мы могли предложить решение. – Jon
Можете ли вы создать интерфейс (IDisplayable) и позволить различным классам реализовать его?Это будет более приятный стиль OO, а затем просто использование объекта. – Daniel
@ Jon: Извините, но у меня нет прецедента, только некоторые заметки, которые я сделал на бумаге, но ни один из них не связан с этим, мои знания о них все еще слишком ограничены, чтобы реально использовать их. – Kryptoxx