C# DataGridView通过Linq使用c变成只读#

C# DataGridView通过Linq使用c变成只读#,c#,winforms,entity-framework,linq,datagridview,C#,Winforms,Entity Framework,Linq,Datagridview,我正在使用C#(Windows窗体)和实体框架以及Linq实现一个系统 当使用普通linq语句时,DataGridView运行良好,但当我使用“Join”时,DataGridView变成只读,我无法编辑任何内容 示例:DataGridView可以很好地处理以下语句: var query = from d in db.Device select d; dgvDevices.DataSource = query.ToList(); 但此查询将使其不可编辑: var query =

我正在使用C#(Windows窗体)和实体框架以及Linq实现一个系统

当使用普通linq语句时,
DataGridView
运行良好,但当我使用“Join”时,
DataGridView
变成只读,我无法编辑任何内容

示例:DataGridView可以很好地处理以下语句:

var query = from d in db.Device select d;
        dgvDevices.DataSource = query.ToList();
但此查询将使其不可编辑:

var query = from u in db.Users join d in db.Device on u.id equals d.AssignedTo 
            select new { d.id, d.Name, d.OwnerName,
                         d.OwnerPhoneNumber, d.Details, User = u.Name };
dgvDevices.DataSource = query.ToList();

这是因为匿名类型的性质是只读的

匿名类型提供了一种封装一组 将只读属性转换为单个对象,而无需显式 首先定义一个类型


要克服这一限制,您可以创建自己的类,并使用自己的类来塑造查询的输出。

使用
列表作为
数据源
作为
数据网格视图
不是一个好主意。您正试图用1D信息(
列表
)填充2D控件(
DataGridView
)。最符合逻辑的类型是
DataTable
。无论如何,这一事实并不能解释您所抱怨的只读问题。PS:今后,请提供您发布代码中所有变量的适当定义。