A melhor maneira de vincular My.Settings a um datagridview, para que o usuário final possa modificar?
-
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
Solução
Você deve usar o Controle PropertyGrid?Ajudará no que diz respeito ao apoio a tipos de propriedades mais ricas.