Лучший способ связать My.Settings с сеткой данных, чтобы конечный пользователь мог изменить? - PullRequest
2 голосов
/ 17 мая 2011

Как мы можем привязать базу данных к некоторым свойствам My.Settings (пользовательская область), чтобы пользователь мог редактировать значения?Это должно быть к datagridview.Я знаю, что мы можем связать My.Settings в форме с текстовыми полями и т. Д., Но в этом случае мы просто хотим, чтобы это был список редактируемых строк в сетке данных.

Конечно, некоторые записи My.Settings могут иметьразличные типы данных, которые усложняют ситуацию, но обычно мы работаем только со строками и логическими значениями.

Также давайте предположим, что пользователь понимает, что он должен ввести строку "true", чтобы установить логическое значение в true.Колонка флажка не нужна.


Вот то, что мы используем (и это работает), просто ищем лучший, более простой способ:

вот класс:

Public Class MySettingsMaint

...

тогда у нас есть список связывания (это, вероятно, юк):

Private list As BindingList(Of BindingKeyValuePair)

вот что связывает сетка данных:

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

1 Ответ

2 голосов
/ 09 июня 2011

Вам следует использовать элемент управления PropertyGrid ?Это поможет в отношении поддержки более богатых типов собственности.

...