2011-01-17 5 views
1

Ich habe eine Datagridview, die gebunden ist - über eine Bindungsquelle - auf eine Liste von Entitäten:Entity Framework 4 Bindung ein Bezugsfeld zu einem Datagridview Spalte

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 meinem Moderator

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

meiner Ansicht

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

Das funktioniert einwandfrei - mein Raster zeigt die Daten so an, wie sie sollten. Im Raster möchte ich jedoch die Spalte ModelId durch ein Beschreibungsfeld aus der Tabelle Model ersetzen. Ich habe versucht, die Bindung für die Spalte von ModelId zu Model.ModelDescription zu ändern, aber die Spalte scheint nur leer.

Ich bin ziemlich sicher, dass die Daten geladen werden, wie ich es sehen kann, wenn ich debugge, und wenn die gleiche Liste an einen Detailbildschirm übergeben wird, kann ich die zugehörigen Daten an Textfelder binden und die Daten sehen .

Mache ich etwas offensichtlich falsch?

Antwort

3

Es ist ein bisschen manuell, aber es funktioniert auf meinem Rechner.

Fügen Sie eine Spalte zu Ihrem DataGridView für das Beschreibungsfeld hinzu und dann, nachdem Sie Ihre DataSource festgelegt haben, durchlaufen Sie dies wie folgt.

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

Sie erhalten eine schreibgeschützte Ansicht Ihrer Suche. Ich mache die neue Spalte nur readonly, aber Sie könnten etwas schreiben, um den Benutzer zu behandeln, der das Feld ändert, wenn Sie möchten, dass Updates auf den Server zurücklaufen. Könnte aber chaotisch sein.

0

Die Antwort ungebundenen beinhaltet nur Spalten lesen Hinzufügen und deren Wert in der Databindingcomplete-Ereignis des Datagridview-Einstellung

wie here

0

Sie können eine Spalte zu Ihrem DataGridView nur hinzufügen, und in der DataPropertyName müssen Sie die Set [entity].[Field name you need] in Ihrem Fall könnten Sie tun: VehiclesType.Description dann müssen Sie eine weitere Bindungsquelle für die VehiclesTypes zum Formular hinzufügen, füllen Sie es mit Ihrem Kontext, und Ihre gute zu gehen;)

Verwandte Themen