Лучший способ связать My.settings для DataGridView, поэтому End User может изменить?

StackOverflow https://stackoverflow.com/questions/6030689

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top