【问题标题】:Problem in DataGridView binding with LINQ?DataGridView 与 LINQ 绑定的问题?
【发布时间】:2011-04-07 13:04:30
【问题描述】:

当我将 linq 查询绑定到 datagridview 的数据源时,我无法更改 gridview 中的任何单元格值。列只读属性自动设置为 true,当我尝试将其设置为 false 时,出现以下异常:-

绑定到只读字段的 DataGridView 列必须将 ReadOnly 设置为 True。 LINQ

这是我的代码

 DataClasses1DataContext db = new DataClasses1DataContext();
 var selectquery = from s in db.Sarees where s.Bill.BillNo == billno select new { s.BillID,s.Price };

我找到了解决这个问题的 1 个解决方案,如果表中有很多列并且我只想选择两个,那么它并不肮脏... 1 解决方案是:-

 var selectquery = db.Sarees.Where(s => s.Bill.BillNo == billno);

当我给出这个查询时,它工作正常.. 但我想要一个解决方案,我可以通过 LINQ 仅选择一些列,并且可以在通过 datagridview 绑定时更改其值...

【问题讨论】:

    标签: c# .net winforms linq datagridview


    【解决方案1】:

    问题是这个查询没有返回Sarees 的集合,所以它不能像你想要的那样编​​辑。它返回一个带有BillIDPrice 属性的新对象的集合。

    DataClasses1DataContext db = new DataClasses1DataContext();
    var selectquery = from s in db.Sarees
                      where s.Bill.BillNo == billno 
                      select new { s.BillID, s.Price };
    

    您能否使用第二个查询的版本并仅将您要编辑的列绑定到DataGridView


    您可能还需要使用DataGridView.CellFormatting Event 进行探索。

    【讨论】:

    • 如何使用第二个版本并且只绑定一些列(例如ID和Price)?
    • 这就是 CellFormatting 事件发挥作用的地方。即使那样,我也不知道字段更改是否会自动更新。我不认为它是为了像 OP 所要求的那样保存具有深度的对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多