2009-07-02 14 views
3

私は顧客のリストを示すDataGridViewとグリッドで選択された顧客の詳細を示す下のテキストボックスを持つフォームを持っています。ListBoxをオブジェクトのList型のプロパティにバインドする方法はありますか

私はCustomerクラスとCustomerListクラスのCustomerオブジェクトを持ち、BindingSourceとDataSourceをCustomerListに設定しています。グリッドのDataSourceはこのBindingSourceです。

テキストボックスのバインドは簡単です。同じBindingSourceを使用し、表示する顧客のプロパティを指定するだけです。問題は、Customerのプロパティの1つがリストそのものであり、このリストをたとえばListBox

リストボックスをデータバインディングを使用して表示する方法と、グリッド内の顧客をクリックするたびにリストを更新する方法はありますか?

答えて

5

リンクBindingSourceを使用することができます。完全な例は以下の通りですが、唯一の興味深いビットは次のとおりです。

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
class Order 
{ 
    public string OrderRef { get; set; } 
    public override string ToString() { 
     return OrderRef; 
    } 
} 
class Customer 
{ 
    public string Name {get;set;} 
    public Customer() { Orders = new List<Order>(); } 
    public List<Order> Orders { get; private set; } 
} 
static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     List<Customer> customers = new List<Customer> { 
      new Customer {Name = "Fred", Orders = { 
       new Order { OrderRef = "ab112"}, 
       new Order { OrderRef = "ab113"} 
      }}, 
      new Customer {Name = "Barney", Orders = { 
       new Order { OrderRef = "ab114"} 
      }}, 
     }; 
     BindingSource outer = new BindingSource(customers, ""), 
      inner = new BindingSource(outer, "Orders"); 
     Application.Run(new Form 
     { 
      Controls = 
      { 
       new DataGridView { 
        Dock = DockStyle.Fill, 
        DataSource = outer}, 
       new ListBox { 
        Dock = DockStyle.Right, 
        DataSource = inner 
       } 
      } 
     }); 
    } 
} 
+0

フォームを作成するためのきれいな最小限のアプローチ。 – VVS

+0

オブジェクト/コレクションイニシャライザが大好きです;-p –

+0

まさに私が探していたものです - ありがとう! – jonsb

0

私はプロパティは文字列のリストであることを前提としています

 BindingSource outer = new BindingSource(customers, ""), 
      inner = new BindingSource(outer, "Orders"); 

ここにコードを示します。

あなたがテキストのために行ったようにしなければならないすべて、実行します。

listBox1.DataSource = ListOfProperties; 

ただ、顧客の変化にリストを変更します。 コードを投稿すると、実際の問題点をより簡単に知ることができます。

関連する問題