我将linq-to-sql查询的结果绑定到datagridview。如果我只是从一个数据库表中选择,这可以正常工作。但是,如果它是一个连接查询,我从两个表中选择字段,那么因为select是进入匿名类型,结果是只读的。因此我的datagridview也是readonly。我希望DGV中的字段可以编辑。
如果我创建一个非匿名类型,并在linq查询中使用它,那么DGV是可编辑的,但调用SubmitChanges()方法不起作用。我知道我可以在调用SubmitChanges()之前手动填写结果,但感觉应该有更好的方法来做到这一点。特别是考虑到它必须是一项相当普遍的任务。
建议的方法是什么?
谢谢你的帮助,
丹。
答案 0 :(得分:2)
我所做的是创建一个显示类,将linq作为sql表对象作为构造函数的参数,然后只包装我想要显示的属性。例如,以下课程我想允许编辑街道和城市,但也显示应用程序编号和状态:
public class AddressDisplay
{
private Retailer _retailer;
private BusinessAddress _address;
public AddressDisplay(Retailer retailer, BusinessAddress address)
{
_retailer = retailer;
_address = address;
}
public string ApplicationNumber
{
get { return _retailer.ApplicationNumber; }
}
public string Status
{
get { return _retailer.Status; }
}
public string Street
{
get { return _address.Street1; }
set { _address.Street1 = value; }
}
public string City
{
get { return _address.City; }
set { _address.City = value; }
}
}
然后返回AddressDisplay
的实例以绑定到DataGridView
:
var addresses = from a in _context.BusinessAddresses
join r in _context.Retailers on a.ApplicationNumber equals r.ApplicationNumber
where a.City == city
select new AddressDisplay(r, a);
HTH