Привязка сетки данных к запросу linq-to-sql из нескольких таблиц - PullRequest
1 голос
/ 01 ноября 2010

Я связываю результаты запроса linq-to-sql с сеткой данных. Это прекрасно работает, если я просто выбираю из одной таблицы базы данных. Однако, если это запрос соединения, в котором я выбираю поля из обеих таблиц, то, поскольку выборка идет в анонимный тип, результаты доступны только для чтения. Следовательно, мое представление данных также доступно только для чтения. Я хочу, чтобы поля в DGV были редактируемыми.

Если я создаю неанонимный тип и использую его в запросе linq, DGV можно редактировать, но вызов метода SubmitChanges () не работает. Я знаю, что мог бы вручную заполнить результаты перед вызовом SubmitChanges (), но мне кажется, что должен быть лучший способ сделать это. Особенно с учетом того, что это должно быть довольно распространенное задание.

Какой рекомендуемый способ сделать это?

Спасибо за любую помощь,
Dan.

1 Ответ

2 голосов
/ 01 ноября 2010

Что я сделал, так это создал класс отображения, взяв объекты таблиц linq to 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...