【问题标题】:Datagridview with linq to entities anonymous type带有 linq 到实体匿名类型的 Datagridview
【发布时间】:2013-02-27 07:28:43
【问题描述】:

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

我从三个表中提取数据;带有以下查询的项目、任务和链接任务项:

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 填充 datagridview(使其可修改),则用户的信息不友好且不清楚。

我误解或正在以错误的方式解决这个问题,我迫切需要一些关于如何完成工作的建议。我还没有在 Internet 上或我所拥有的有关该主题的书籍中找到任何内容。

【问题讨论】:

    标签: c# linq-to-entities


    【解决方案1】:

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

    【讨论】:

    • 感谢 dutzu 的帮助,我已经从实体中检索了所有项目,并从其他两个实体中检索了一些项目。 DataGridViewColumn colRole = new DataGridViewTextBoxColumn();等等.. colRole.ReadOnly = false; dgvMissionItems.Columns.Add(colRole);但我仍然无法编辑。你是什​​么意思”而不是通过将实体和网格的数据源重新打包到新对象中来破坏它们之间的链接我尝试了 List tempList = new List() 并添加了匿名类型条目但仍然没有运气。无法编辑该列。
    • NOOOO,不要使用新的匿名类。按原样返回实体并将它们提供给 DataGrid。不要创建新对象,返回数据库中的实体,只显示具有您要显示的属性的列。这样你应该仍然有编辑功能。
    • OPPS 对不起,明白了。最后一件事如果你不介意,如果我在查询中使用“into”来组合连接,这是一个好的解决方案吗?
    • 它应该可以工作,只返回实体而不是新对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2013-03-25
    • 2011-11-07
    相关资源
    最近更新 更多