开发者

Entity Framework 4 Binding a related field to a DataGridView column

I have a DataGridView that is bound - via a binding source - to a list of entities:

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();                
}

In my presenter

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

in my view

public void BindTo(List<Vehicle> vehicles)
{
    _vehicles = vehicles;
    if (_vehicles != null)
    {
        Vehicle开发者_开发问答BindingSource.DataSource = _vehicles;
    }
}

This works fine - my grid displays the data as it should. However, in the grid I am wanting to replace the ModelId column with a description field from the Model table. I've tried changing the binding for the column from ModelId to Model.ModelDescription but the column just appears blank.

I'm pretty sure that the data is being loaded, as I can see it when I debug, and when the same list is passed to a details screen I can successfully bind the related data to text fields and see the data.

Am I doing something obviously wrong?


It's a bit manual, but it 'works on my machine'.

Add a column to your DataGridView for the description field and then after you set your DataSource iterate through like so.

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

You get a readonly view of your lookup. I make the new column readonly, but you could write something to handle the user changing the field if you wanted updates to run back to the server. Might be messy though.


The answer involves adding unbound read only columns and setting their value in the DataGridView's DataBindingComplete event

as described here


You can just add a column to your DataGridView, and in the DataPropertyName you must set the [entity].[Field name you need] in your case you could do: VehiclesType.Description then you must add another binding source for the VehiclesTypes to the form, fill it using your context, and your good to go ;)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜