テーブル名を使用して、データベースからテーブルを取得できる関数を作成しようとしています。DataTable を使用して動作させましたが、WPF の DataGrid でグループ化の可能性を使用するために ListCollectionView で使用できるため、ObservableCollection/List を使用することをお勧めします。
ただし、 DataManager クラスで作成した関数が、テーブルに対応するさまざまな型のコレクションを返す必要があるという問題に直面しています。作成時に型が定義される 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;
}
...
DRAFT OF MODIFIED METHOD (私はこれがおそらく完全に間違っていることを知っています):
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