我使用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;
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;