我为一组Windows用户创建了一个简单的桌面应用程序(.NET 4.5)。我正在考虑使用Entity Framework(6)。该设计首先是数据库。
CREATE TABLE [CommodityCombo](
Recid INT IDENTITY PRIMARY KEY NOT NULL,
Name VARCHAR(100) NOT NULL DEFAULT ''
) ON [PRIMARY]
GO
CREATE TABLE [CommodityComboMember] (
Commodity VARCHAR(20) NOT NULL PRIMARY KEY,
ComboId INT NOT NULL REFERENCES CommodityCombo(Recid)
) ON [PRIMARY]
GO
这就是两个表的SQL。这个概念是一对主/详细数据网格视图。主人将用于添加/删除CommodityCombos以及添加/删除成员的细节。
那么在表单加载事件处理程序中我有......
try
{
db = new MyEntities();
var combos = (from c in db.CommodityCombos
select c);
//this.dataGridView1.DataSource = combos;
this.dataGridView1.DataSource = db.CommodityCombos.ToList();
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}
现在我认为如果datagridview具有常规的添加/删除功能,那将非常简单。即,您可以突出显示一行,然后按[删除]或在底部空白行中添加信息。但这似乎不起作用。记录进来了,但是"自然"添加/删除无效。
现在我找到了这篇文章...... DataGridView AllowUserToAddRow property doesn't work
接受的答案表明,要做的就是传递查询对象。
然而,这会产生一个例外......而且这篇文章对应...... Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported ...基本上我说我必须使用object.toList()。
不可否认,我注意到第一篇文章接受了使用绑定源的答案提示,但它缺少一些细节,这些细节用于将查询结果作为绑定源提供,同时保留添加/删除功能,同时不会抛出异常。
有人可以对此有所了解吗?或者让我指向一个更好的资源方向?或者我应该想出并创建[新]和[删除]按钮来手动处理它?</ p>