Лучший способ связать My.settings для DataGridView, поэтому End User может изменить?
-
14-11-2019 - |
Вопрос
Как мы можем получить данные DataGridView для некоторых свойств My.settings (Scoped), поэтому пользователь может редактировать значения? Это должно быть для DataGridView. Я знаю, что мы можем связаться с My.settings в форме с текстовыми коробками и так далее, но в этом случае мы просто хотим, как это как список редактируемых строк в DataGridView.
Конечно, некоторые записи My.settings могут иметь разные типы данных, которые усложняют вопросы, но обычно мы работаем только с строками и логическими.
Также, давайте предположим, что пользователь понимает, что он должен ввести строку «True», чтобы установить логию на true. Нет необходимого столбца Checkbox.
Вот то, что мы используем (и это работает), просто ищу лучший, легкий путь:
Вот класс:
Public Class MySettingsMaint
.
...
Тогда у нас есть связывающий список (это, вероятно, юк):
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:
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
. Решение
You should use the PropertyGrid control? It will help with regard to supporting richer property types.