2011-01-17 23 views
1

私はバインドされたDataGridView持っている - バインディングソースを経由して - エンティティのリストに:Entity Frameworkの4 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

これは少し手作業ですが、「自分のマシンで動作します」。

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

答えはあなたがちょうどあなたのDataGridViewに列を追加することができ、かつDataPropertyNameにあなたが設定しなければならない列のみを読み、here

0

を説明したのDataGridViewのDataBindingCompleteイベント

で自分の価値を設定し、非結合加えることを含みます[entity].[Field name you need]あなたの場合:VehiclesType.Description VehiclesTypesの別のバインディングソースをフォームに追加し、コンテキストを使用して記入してください。)

関連する問題