将datagridview绑定到多表linq-to-sql查询

时间:2010-10-31 23:05:21

标签: c# linq-to-sql datagridview

我将linq-to-sql查询的结果绑定到datagridview。如果我只是从一个数据库表中选择,这可以正常工作。但是,如果它是一个连接查询,我从两个表中选择字段,那么因为select是进入匿名类型,结果是只读的。因此我的datagridview也是readonly。我希望DGV中的字段可以编辑。

如果我创建一个非匿名类型,并在linq查询中使用它,那么DGV是可编辑的,但调用SubmitChanges()方法不起作用。我知道我可以在调用SubmitChanges()之前手动填写结果,但感觉应该有更好的方法来做到这一点。特别是考虑到它必须是一项相当普遍的任务。

建议的方法是什么?

谢谢你的帮助,
丹。

1 个答案:

答案 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