1 var source = from t in db.Transaction 2 orderby t.TransactionTime descending 3 select t;
通过linq to sql获取到了数据源 加载在datagridview中 datagridview的cell是可以编辑的 也就是BeginEdit 返回true
可是,将数据源改成如下:
1 var source = from t in GlobalClass.db.Transaction 2 orderby t.TransactionTime descending 3 select new 4 { 5 唯一标识 = t.RowGuid, 6 交易金额 = t.TransactionMoney, 7 交易时间 = t.TransactionTime, 8 交易类型 = t.TransactionType, 9 备注 = t.Remark 10 };
datagridview的BeginEdit返回值就是false 也就是单元格无法编辑
类似select new{} 这样的叫做投射,投射会实例化一个新的对象Linq.Enumerable 的泛型对象,并且这个集合里的所有的对象的所有属性都是只读的。也就是说通过你的第二个linq语句获得的source,以下是不被允许的
var m=source.FirstOrDefault() m.交易金额=500;
自然datagridview就无法编辑了
那有什么别的办法呢
@_难得糊涂丶: 不清楚你为啥这么实现,不过我通常用datagridview来做展示,如果要对记录进行编辑的话都打开一个新画面,之后再持久化。
你新生成了一个对象是缓存中的,gridview不可能去编辑啊,他编辑了要回传数据的,实际上他们是地址绑定啊。现在的source应该是一个IQueryable,你ToList后再绑到GridView中,这样就有一个对象对应了,应该可以修改了,类似datatable。
注:没有测试过,只凭理论理解,有误导请谅解。