.NET3.5を使用しています
抽象クラスPersonから継承するクラスMemberがあります
public class Member : Person { public int Number { get; set; } public string LastName { get; set; } public string OtherNames { get; set; } }
私はBindingListを次のように宣言しました:
BindingList<Person> p_List = new BindingList<Person>();
次のような列を持つDataGridViewがあります。
col1.DataPropertyName = "Number"; col2.DataPropertyName = "LastName"; col3.DataPropertyName = "OtherNames";
メンバーオブジェクトのリストからバインディングリストを2に入力します。次に、次のようにBindingListをdatagridviewにバインドします。
this.dgListView.DataSource = p_List;
datagridviewには、3つの列と、メンバーの数と同じ数の行があります。ただし、セルにはデータがありません。その理由は、Memberの3つのプロパティが親(Person)に利用できないためだと思います。「Member-Typed」BindingListm_Listを作成し、「Person-Typed」p_Listをループして入力すると、datagridviewは問題なく入力されます。(以下のコードを参照してください)。
BindingList<Member> m_List = new BindingList<Member>();
foreach (Person p in p_Plist)
{
Member m = (Member)p;
m_List.Add(m);
}
this.dgListView.DataSource = m_List;
ただし、いくつかの理由から、これは避けたいと思います。主な理由は、p_Listが、Person型のさまざまなオブジェクトにアクセスするために使用しているクラスのプロパティであるためです。これらの各オブジェクトは、異なるウィンドウフォームに関連付けられています。したがって、オブジェクトクラスがPersonクラスを継承している限り、p_Listを使用してオブジェクトを関連する形式で表示したいと思います。また、2つのコピー(m_Listとp_List)を維持したくないのは、一方から並べ替え、追加、削除、またはフィルタリングすると、もう一方で並べ替えを強制されるためです。datagridviewにプロパティを検出させて、BindingList<Person>
バインドされているかのようにデータを入力できるようにする方法はありBindingList<Member>
ますか?