1

5 つのコンボ ボックスがある win フォームがあるとします。

1 つずつ入力するには 5 つのデータ テーブルが必要だと言う人もいました。あまり論理的ではないように思われ、醜いコードが作成されると思います。

データベースに保存されているデータをどのように入力しますか?

4

3 に答える 3

4

次のようなクラスを使用します。

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でなければなりません。したがって、なぜバインダーはIListIListSourceComboboxList<KeyValuePair<TKey,TValue>>

于 2010-05-26T10:52:26.020 に答える
1

個人的には、WinForms のデータバインディングは面倒だと思うので、for ループを使って手動で行っています。1 つのデータセットをループして、そのループ内の各コンボ ボックスに要素を追加するだけです。

注:WPFでこれを行うことは決して考えません-データバインディングメカニズムの方がはるかに優れています...

于 2010-05-26T10:37:02.007 に答える
1

BindingSource、Windows フォームの親友になることができます。

その後、プロパティを割り当てることができBindingSource.DataSourceます。設計時に esをバインドComboBoxした、つまり、各ComboBox.DataSourceプロパティを のインスタンスに設定したのでBindingSource、必要なのはBindingSource.

この SO の質問に対する私の回答を参照して、BindingSourceクラスを使用した Windows フォーム DataBinding のおおよそのウォークスルーを確認してください。

ComboBox 戦略ごとのテーブルに関しては、階層ごとにテーブルを持つことができるので、これは便利です。ここでは、長い道のりになる可能性のあるオブジェクト リレーショナル永続化戦略について議論する可能性が高くなります。つまり、詳細については、この NHibernate リファレンス ドキュメントとChapter 8. Inheritence Mappingを参照してください。に関心を持つ可能性が高くなりますThree Strategies

質問でNHibernateなどについて言及していないことがわかりました。私の目標は、あなたの質問によって間接的に尋ねられた、最も一般的なエンティティ永続化戦略のいくつかを簡単に示すことです。

于 2010-05-26T13:19:09.650 に答える