Entity Framework 4 Привязка связанного поля к столбцу DataGridView - PullRequest
1 голос
/ 17 января 2011

У меня есть DataGridView, который связан - через источник привязки - со списком объектов:

VehicleRepository:

private IObjectSet<Vehicles> _objectSet;

public VehicleRepository(VPEntities context)
{
    _context = context;
    _objectSet = context.Vehicles;              
}

List<Vehicle> IVehicleRepository.GetVehicles(Model model)
{
    return _objectSet
        .Where(e => e.ModelId == model.ModelId)
        .ToList();                
}

В моем презентере

private List<Vehicle> _vehicles;
...
_vehicles = _vehicleRepository.GetVehicles(_model);
_screen.BindTo(_vehicles);

на мой взгляд

public void BindTo(List<Vehicle> vehicles)
{
    _vehicles = vehicles;
    if (_vehicles != null)
    {
        VehicleBindingSource.DataSource = _vehicles;
    }
}

Это работает нормально - моя сетка отображает данные так, как должна. Однако в сетке я хочу заменить столбец ModelId полем описания из таблицы Model. Я попытался изменить привязку для столбца с ModelId на Model.ModelDescription, но столбец выглядит пустым.

Я почти уверен, что данные загружаются, поскольку я вижу их при отладке, и когда тот же список передается на экран сведений, я могу успешно связать связанные данные с текстовыми полями и просмотреть данные.

Я что-то делаю явно неправильно?

Ответы [ 3 ]

3 голосов
/ 10 февраля 2011

Это немного ручная работа, но она «работает на моей машине».

Добавьте столбец в свой DataGridView для поля описания, а затем, после того как вы настроите свой DataSource, выполните итерации, как показано.

Dim row As Integer = 0
foreach (entity In (List<Entity>)MyBindingSource.DataSource)
{
    string description = entity.Description;
    MyDataGridView.Rows[row].Cells["MyDescriptionCell"].Value = description;
    row ++;
}

Вы получаете только чтение вашего поиска. Я делаю новый столбец доступным только для чтения, но вы можете написать что-нибудь, чтобы обработать изменение пользователем поля, если вы хотите, чтобы обновления запускались обратно на сервер. Хотя может быть грязно.

0 голосов
/ 08 ноября 2013

Вы можете просто добавить столбец к вашему DataGridView, и в DataPropertyName вы должны установить [entity].[Field name you need], в вашем случае вы можете сделать: VehiclesType.Description затем вы должны добавить другой источник привязки для VehiclesTypes к форме, заполнить ее, используя ваш контекст, и все готово;)

0 голосов
/ 05 января 2013

Ответ включает добавление несвязанных столбцов только для чтения и установку их значения в событии DataBindingComplete объекта DataGridView

, как описано здесь

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