5 つのコンボ ボックスがある win フォームがあるとします。
1 つずつ入力するには 5 つのデータ テーブルが必要だと言う人もいました。あまり論理的ではないように思われ、醜いコードが作成されると思います。
データベースに保存されているデータをどのように入力しますか?
次のようなクラスを使用します。
Public Class ComboboxBinder(Of TKey, TValue)
Inherits List(Of KeyValuePair(Of TKey, TValue))
Public Sub New()
End Sub
Public Overloads Sub Add(ByVal key As TKey, ByVal value As TValue)
MyBase.Add(New KeyValuePair(Of TKey, TValue)(key, value))
End Sub
Public Sub Bind(ByVal control As ComboBox)
control.DisplayMember = "Value"
control.ValueMember = "Key"
control.DataSource = Me
End Sub
End Class
それを使用するには、次のようにします。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim binder As New ComboboxBinder(Of Guid, String)
binder.Add(Guid.NewGuid, "Item 1")
binder.Add(Guid.NewGuid, "Item 2")
binder.Add(Guid.NewGuid, "Item 3")
binder.Add(Guid.NewGuid, "Item 4")
binder.Bind(ComboBox1)
End Sub
Winforms はバインドが非常に面倒ですが、このソリューションは当社にとって十分に機能します。また、注目に値するのは、 a にバインドできないことです。それはor andDictionary
でなければなりません。したがって、なぜバインダーはIList
IListSource
Combobox
List<KeyValuePair<TKey,TValue>>
個人的には、WinForms のデータバインディングは面倒だと思うので、for ループを使って手動で行っています。1 つのデータセットをループして、そのループ内の各コンボ ボックスに要素を追加するだけです。
注:WPFでこれを行うことは決して考えません-データバインディングメカニズムの方がはるかに優れています...
はBindingSource
、Windows フォームの親友になることができます。
その後、プロパティを割り当てることができBindingSource.DataSource
ます。設計時に esをバインドComboBox
した、つまり、各ComboBox.DataSource
プロパティを のインスタンスに設定したのでBindingSource
、必要なのはBindingSource
.
この SO の質問に対する私の回答を参照して、BindingSource
クラスを使用した Windows フォーム DataBinding のおおよそのウォークスルーを確認してください。
ComboBox 戦略ごとのテーブルに関しては、階層ごとにテーブルを持つことができるので、これは便利です。ここでは、長い道のりになる可能性のあるオブジェクト リレーショナル永続化戦略について議論する可能性が高くなります。つまり、詳細については、この NHibernate リファレンス ドキュメントとChapter 8. Inheritence Mapping
を参照してください。に関心を持つ可能性が高くなりますThree Strategies
。
質問でNHibernateなどについて言及していないことがわかりました。私の目標は、あなたの質問によって間接的に尋ねられた、最も一般的なエンティティ永続化戦略のいくつかを簡単に示すことです。