带有linq的Datagridview实体匿名类型

时间:2013-02-27 07:28:44

标签: c# linq-to-entities

我正在努力了解如何从使用linq到实体的linq查询填充的datagridview更新SQL数据库。

我从三个表中提取数据;具有以下查询的Items,Missions和linkMissionItem:

var itemList = from x in me.LinkMissionItem
    join i in me.items on x.itemID equals i.itemID
    join m in me.Missions on x.missionID equals m.MissionID
    where m.MissionNo == selectedMission
    orderby i.categoryID, i.name
    select new { i.itemID, 
                 i.name, 
                 x.Role, 
                 i.Type.typeName, 
                 i.Category.categoryName, 
                 i.model, 
                 i.serialNo, 
                 i.Origin.originCountry, 
                 i.cost, 
                 x.Packaging };

我知道查询提供了一个匿名类型,从所有三个表中拉出一些列并将其绑定到datagridview,如下所示:

dgvMissionItems.DataSource = itemList.ToList();

使datagridview只读。很明显,我目前以编程方式更新Packaging字段,没问题。

但是,拥有datagridview的好处是通过编辑单个单元格来添加或更改数据。我需要允许用户编辑linkMissionItem表中的Role字段。如果我只使用实体LinkMissionTable填充数据网格视图(使其可修改),则用户的信息不友好且不清楚。

我误解或正在以错误的方式攻击这个问题,我迫切需要一些关于如何完成工作的建议。我还没有在互联网上找到任何关于这个主题的书籍。

1 个答案:

答案 0 :(得分:0)

您应检索整个实体(以及所需的相关实体),但禁用DataGridView的AutoGenerateColumns功能。然后,只定义要向用户显示的列,而不是通过将它们重新打包到新对象中来断开实体和网格数据源之间的链接。