获取任何EntityType对象的表数据,因为DataGrid可以显示它的列和数据
本文关键字:数据 显示 DataGrid EntityType 任何 对象 获取 因为 | 更新日期: 2023-09-27 18:16:50
我在我的WPF
程序中有一个这样的方法:
void ShowTableInDataGrid(EntityType myEntityType)
{
var tableName = myEntityType.Name;
var result = _context.Database.
SqlQuery<dynamic>("SELECT * FROM dbo." + tableName).ToList();
DataGridMain.ItemsSource = result;
}
通过EntityFramework
从数据库中加载TableName
的数据,而不显示DataGridMain
控制的任何数据。DataGridMain
根据分配给ItemsSource
的实体类信息自动创建列
现在,例如如果我将dynamic
更改为Customer
:
SqlQuery<Customer>("SELECT * FROM dbo." + tableName).ToList();
和TableName
是Customer
,那么DataGridMain
显示列和数据非常好。
但是我有超过100个不同的表,我不知道哪个表信息将在设计时传递给ShowTableInDataGrid
方法,然后我应该写超过100个案例(EF中每个表一个案例)来处理这个问题,像这样:
void ShowTableInDataGrid(EntityType myEntityType)
{
var tableName = myEntityType.Name;
//....
switch (selectedEntity.Name)
{
case "Customer":
{
result = _db.Database.SqlQuery<Customer>("SELECT * FROM dbo." + selectedEntity.Name).ToList();
break;
}
case "Book":
{
result = _db.Database.SqlQuery<Book>("SELECT * FROM dbo." + selectedEntity.Name).ToList();
break;
}
.
.
.
. // OVER 100 CASE !!!
.
.
.
default:
{
MessageBox.Show("New Case Needed!");
break;
}
}
DataGridMain.ItemsSource = result;
}
我的问题是
有没有办法防止这种开关情况??我认为这种方式是硬代码,非常静态。我讨厌这样……
这个作品的基础:我想在我的Comobox
中显示EF
表,并在DataGrid
中显示它,当我从Combobox
中选择一个表时。目前我的Combobox
工作良好,DataGrid
是问题。
试试这个,它似乎没有抱怨它,但没有完整的设置来测试它。
void ShowTableInDataGrid(System.Data.Entity.Core.Metadata.Edm.EntityType myEntityType) {
var tableName = myEntityType.GetType();
var result = _context.Database.
SqlQuery<myEntityType.GetType()> ("SELECT * FROM dbo." + tableName).ToList();
DataGridMain.ItemsSource = result;
}