2

ユーザーが値を編集できるように、datagridview を一部の My.Settings (ユーザー スコープ) プロパティにデータバインドするにはどうすればよいでしょうか? これは datagridview でなければなりません。テキストボックスなどを含むフォームで My.Settings にバインドできることはわかっていますが、この場合は、datagridview 内の編集可能な文字列のリストとしてのみ必要です。

もちろん、一部の My.Settings エントリにはさまざまなデータ型が含まれている可能性があり、問題が複雑になりますが、通常は文字列とブール値のみを使用します。

また、ブール値を true に設定するには文字列「true」を入力する必要があることをユーザーが理解していると仮定します。チェックボックス列は必要ありません。


これが私たちが使用しているものです(そしてそれは機能します)、より良い、より無駄のない方法を探しているだけです:

クラスは次のとおりです。

Public Class MySettingsMaint

...

次に、バインディングリストがあります (これはおそらく yuk です):

Private list As BindingList(Of BindingKeyValuePair)

datagridview がバインドするものは次のとおりです。

Public ReadOnly Property DataSource() As Object 
    Get

        list = New BindingList(Of BindingKeyValuePair)
        list.Add(New BindingKeyValuePair("PhoneExtension", My.Settings.PhoneExtension.ToString.ToLower))
        list.Add(New BindingKeyValuePair("PhonePIN", My.Settings.PhonePIN.ToString.ToLower))
        list.Add(New BindingKeyValuePair("PhoneEnabled", My.Settings.PhoneEnabled.ToString.ToLower))
        Return From k In list Order By k.Key

        Return list
    End Get
End Property

...

Public Sub LoadGrid(ByVal grd As DataGridView) Implements 
/some stuff here to create two DataGridViewColumns
/one bound to Key, the other bound to Setting

End Sub

My.Settings に保存するために、ここにさらに yuk を追加します。

Public Sub Save() Implements IMaintainable.Save
    My.Settings.PhoneExtension = (From x As BindingKeyValuePair In list Where x.Key = "PhoneExtension" Select x.Value.ToLower).ToList(0)
    My.Settings.PhonePIN = (From x As BindingKeyValuePair In list Where x.Key = "PhonePIN" Select x.Value.ToLower).ToList(0)
    My.Settings.PhoneEnabled = (From x As BindingKeyValuePair In list Where x.Key = "PhoneEnabled" Select x.Value.ToLower).ToList(0) = "true"

    My.Settings.Save()

End Sub

上記のクラスに必要なプライベート クラス:

Private Class BindingKeyValuePair

    Sub New(ByVal k As String, ByVal v As String)
        Key = k
        Value = v
    End Sub

    Private _Key As String
    Public Property Key() As String
        /basic getsetter
    End Property


    Private _Value As String
    Public Property Value() As String
         /basic getsetter
    End Property


End Class
4

1 に答える 1

2

PropertyGrid コントロールを使用する必要がありますか? より豊富なプロパティ タイプのサポートに関して役立ちます。

于 2011-06-08T20:20:54.327 に答える