オブジェクトのリストを保持する中間層クラスがある場合、使用するListBoxはDisplayMembersに正しくデータを設定できません。Layerクラスがなくてもすべて問題ありませんが、プロジェクトに必要です。これは非常に単純化された例です。
乗客
class Passenger
{
private string name;
public Passenger(string custName)
{
name = custName;
}
public string Name
{
get { return name; }
}
}
飛行機
class Plane
{
public List<LayerClass> passengerList;
public Plane()
{
// Using this instead of using Passenger,
// if Passenger is used there are no problems
passengerList = new List<LayerClass>();
}
}
レイヤークラス
class LayerClass
{
private Passenger p;
private int ID;
public Passenger P
{
get { return p; }
set { p = value; }
}
}
飛行機に3人の乗客の名前を入力してから、以下のコードを入力するとします。
BindingSource bs = new BindingSource();
bs.DataSource = plane.passengerList;
aListBox.DataSource = bs;
aListBox.DisplayMember = "Name";
aListBoxは、乗客の名前の代わりに、複数行のテキスト「DataBinding.TestApp、LayerClass 」を表示します。このコードを挿入すると、bs.DataMember = "P";
またはaListBox.DisplayMember = "P.Name";
、リストボックスに最初の乗客の名前のみが表示され、他のすべての名前は無視されます。
リストボックスにすべての乗客の名前を表示するにはどうすればよいですか?PassengerクラスのToString()メソッドをオーバーライドしません。私が見逃している単純なものかもしれませんが、DataBindingは初めてです。これは、使用を許可されているものに厳しい制限があるWindowsフォームアプリケーションです。XAMLまたはWPFは許可されていません。