我正在尝试制作DataGridView
表单,其中包含泛型 DataSource
并显示数据。
我无法使数据绑定起作用:
EntityFramework.dll中出现未处理的“System.NotSupportedException”类型异常
其他信息:不支持直接绑定到商店查询(DbSet,DbQuery,DbSqlQuery,DbRawSqlQuery)的数据。而是使用数据填充DbSet,例如通过在DbSet上调用Load,然后绑定到本地数据。对于WPF绑定到DbSet.Local。对于WinForms绑定到DbSet.Local.ToBindingList()。对于ASP.NET WebForms,您可以绑定到查询上调用ToList()的结果或使用模型绑定,有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=389592。
我尝试传递DataTable
,DataSet
和List
- 但没有运气......我的问题是我想使用存储库模式并创建一个可以使用不同的通用存储库类我的数据库中的表。
这是我第一次尝试编写存储库模式代码,并使用泛型类型。
public DataGridForm(IEnumerable<???> source) // TEntity or T can't be recognized by VisualStudio as a type!
{
InitializeComponent();
// TODO: Complete member initialization
this.bindingSource.DataSource = source;
}
我很难做到这一点。请告诉我们如何实现这一目标?
我称这种方法为:
public IEnumerable<TEntity> GetAll()
{
return Context.Set<TEntity>().ToList();
}
我知道这是一个有问题的问题,但我需要以某种方式提供帮助
~ChenChi
更新:接受的答案没有问题,真正的问题是我的AutoGenerateColumns属性默认设置为 false !
dataGridView.AutoGenerateColumns = true;
通过代码隐藏将其设置为true使一切正常......我在属性窗口中寻找此属性而我找不到它?!也许是某些我不知道的Visual Studio bug ...
答案 0 :(得分:1)
DataSource
的 BindingSource
属性接受object
。因此,将object
数据传递给表单的构造函数就足够了:
public DataGridForm(object source)
{
InitializeComponent();
// TODO: Complete member initialization
this.bindingSource.DataSource = source;
}
对于运行时数据绑定,您不需要该类型。但出于任何原因,如果您想将IEnumerable<T>
传递给表单,表单应该是DataGridForm<T>
,它在设计器中有副作用。