联接表的DataGrid不可编辑

问题描述 投票:0回答:1

我使用LINQ加入了两个表,它们的关系已映射到EF中,但是现在datagrid中显示的数据不可编辑,我如何才能做到这一点?

我的加入表达:

CMIS_Entities context = new CMIS_Entities();
var query = context.PI_Line.Join(context.PI_Sheet, c => c.idL, x => x.idL, (c, x) => new
{

    Sheet=x.Sh1.ToString() + "/" + c.TotalSheet.ToString(),
    Sh1=x.Sh1,
    idS=x.idS,
    idL=c.idL,
    IsoLine=x.Line3,
    SheetValidity=x.SheetValidity,
    Pos=c.Pos,
    Zone=c.Zone,
    Line=c.Line,
    WellHead=c.WellHead,
    Validity=c.RevValid
}).ToList();

Line_Grid.ItemsSource = query;
c# sql-server join datagrid contenteditable
1个回答
0
投票

DataGrid为ItemsSource中项目的每个属性创建列。如果属性具有public设置器,则列是可编辑的。在这种情况下,ItemsSource由不可变的匿名对象组成,因此DataGrid是只读的

创建具有必需属性的命名类,并将查询结果转换为该类的实例:

public class DataItem 
{
   public string Sheet { get; set; }
   ...
   public bool Validity { get; set; }
}

CMIS_Entities context = new CMIS_Entities();
var results = context.PI_Line.Join(context.PI_Sheet, c => c.idL, x => x.idL, (c, x) => new DataItem
{

    Sheet=x.Sh1.ToString() + "/" + c.TotalSheet.ToString(),
    Sh1=x.Sh1,
    idS=x.idS,
    idL=c.idL,
    IsoLine=x.Line3,
    SheetValidity=x.SheetValidity,
    Pos=c.Pos,
    Zone=c.Zone,
    Line=c.Line,
    WellHead=c.WellHead,
    Validity=c.RevValid
}).ToList();

Line_Grid.ItemsSource = results;
© www.soinside.com 2019 - 2024. All rights reserved.