2012-01-02 16 views
0

私は、データソースが交差テーブルにあるバインディングリストを持つdatagridvewを持っています。私は参照として機能し、DataGridViewComboBoxColumn型である列の1つにバインドされている別のバインディングリストを持っています。DataGridViewの基本的な質問

  • DepatureのID:テキストボックス
  • 出発:テキストボックス
  • デスティネーションID:テキストボックス
  • public IList<Flight> flights = new List<Flight>() 
    { 
        new Flight { DepartureID = 1, DestinationID = 1, FlightNumber = "101" }, 
        new Flight { DepartureID = 2, DestinationID = 2, FlightNumber = "202" }, 
        new Flight { DepartureID = 3} 
    }; 
    
    public IList<Departure> departures = new List<Departure>() 
    { 
        new Departure {ID = 1, City = "Toronto"}, 
        new Departure {ID = 2, City = "Chicago"}, 
        new Departure {ID = 3, City = "New York"} 
    }; 
    
    public IList<Destination> destinations = new List<Destination>() 
    { 
        new Destination {ID = 1, City = "London"}, 
        new Destination {ID = 2, City = "Paris"}, 
        new Destination {ID = 3, City = "Amsterdam"} 
    }; 
    

    は私のDataGridViewの5つの列があります。下記のように私は、バインディングのリストを簡素化しています

  • 宛先:Combobox
  • フライト番号:テキストボックス

私は3つの質問があります:

1)出発点は読み取り専用です。私はIDと市を表示したいと思います。都市値を自動的に検索するためのテキストボックスを追加するにはどうすればいいですか?私はOnCellPaintingイベントを考えてそれを探していましたが、e.Valueは読み取り専用です。 Delphiに似たOnCellDrawingイベントがありますか?

2)宛先のコンボボックスで、ユーザーがコンボボックスから値を選択すると、宛先IDも更新するにはどうすればよいですか?

3)私は、私が唯一の出発の値コンボボックスは、ルックアップするために何も値)

答えて

1

1がありませんので(例えば、このレコードは、(new Flight { DepartureID = 3})は無効な値エラーをスローを持ってシナリオを処理するにはどうすればよい)最も簡単な方法あなたの出発都市を設定するには、目的地のようにComboBoxを使用します。宛先リストにバインドし、この列にReadOnlyとマークします。これはコードなしで出発を処理するでしょう。

2)フライトのDataGridViewListBindingSourceで拘束する必要があります。 ComboBoxValueMemberがあなたのIDで、あなたのDisplayMemberが市の名前であるため、あなたのIDは自動的に更新されます。

3)データをバインドする場合、テンプレートは同じである必要があります。あなたは常にあなたのリストに目的地とフライト番号を持っているべきです。値がない場合は、nullに設定します。存在しない属性を処理できない間は、nullの値を処理できるようになります。
new Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }

+0

応答のためにありがとうGabriel。私は、読み取り専用のコンボボックスを使わず、まっすぐなテキストボックスを使うことを望んでいました。 Delphi DBGridに似たOnDrawEventがありますか?どこで私の参照を行うことができますか? –

+0

OnDrawEventを使用してコントロールのルックアップを変更することはできますが、コントロールを再描画することに慣れていません。私はあなたがそれをグーグルにすれば多くのチュートリアルがあると確信しています。 –

+0

ありがとうが、DataGridViewのOnDrawEventは表示されません。理想的には、OnDrawCellEventは、グリッド全体だけでなく、列そのものにも適しています。また、Flight.DestinationIDをnullableにしてもらえるよう提案してくれてありがとうと思います。 –