首页 新闻 赞助 找找看

linq to sql 作为数据源 datagridview 无法编辑

0
悬赏园豆:50 [已解决问题] 解决于 2013-07-09 13:26
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 也就是单元格无法编辑 

王元勋的主页 王元勋 | 菜鸟二级 | 园豆:413
提问于:2013-07-04 23:53
< >
分享
最佳答案
0

类似select new{} 这样的叫做投射,投射会实例化一个新的对象Linq.Enumerable 的泛型对象,并且这个集合里的所有的对象的所有属性都是只读的。也就是说通过你的第二个linq语句获得的source,以下是不被允许的

var m=source.FirstOrDefault()
m.交易金额=500;

自然datagridview就无法编辑了

收获园豆:50
朝曦 | 小虾三级 |园豆:1073 | 2013-07-05 08:24

那有什么别的办法呢

王元勋 | 园豆:413 (菜鸟二级) | 2013-07-06 21:09

@_难得糊涂丶:  不清楚你为啥这么实现,不过我通常用datagridview来做展示,如果要对记录进行编辑的话都打开一个新画面,之后再持久化。

朝曦 | 园豆:1073 (小虾三级) | 2013-07-07 11:00
其他回答(1)
0

你新生成了一个对象是缓存中的,gridview不可能去编辑啊,他编辑了要回传数据的,实际上他们是地址绑定啊。现在的source应该是一个IQueryable,你ToList后再绑到GridView中,这样就有一个对象对应了,应该可以修改了,类似datatable。
注:没有测试过,只凭理论理解,有误导请谅解。

kylin.chen | 园豆:983 (小虾三级) | 2013-07-05 08:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册