A melhor maneira de vincular My.Settings a um datagridview, para que o usuário final possa modificar?

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

  •  14-11-2019
  •  | 
  •  

Pergunta

Como podemos vincular um datagridview a algumas das propriedades My.Settings (escopo do usuário) para que o usuário possa editar os valores?Isso deve ser para um datagridview.Eu sei que podemos vincular My.Settings em um formulário com caixas de texto e assim por diante, mas neste caso queremos apenas como uma lista de strings editáveis ​​em um datagridview.

É claro que algumas entradas My.Settings podem ter tipos de dados diferentes, o que complica as coisas, mas geralmente trabalhamos apenas com strings e booleanos.

Além disso, vamos supor que o usuário entenda que deve inserir a string "true" para definir um booleano como verdadeiro.Nenhuma coluna de caixa de seleção é necessária.


Aqui está o que estamos usando (e funciona), apenas procurando uma maneira melhor e mais enxuta:

aqui está a aula:

Public Class MySettingsMaint

...

então temos uma lista de ligação (provavelmente é yuk):

Private list As BindingList(Of BindingKeyValuePair)

aqui está o que o datagridview se liga:

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

mais yuk aqui, para salvar em 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

a classe privada exigida pela classe acima:

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
Foi útil?

Solução

Você deve usar o Controle PropertyGrid?Ajudará no que diz respeito ao apoio a tipos de propriedades mais ricas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top