ユーザーが値を編集できるように、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