Le meilleur moyen de lier My.Settings à une vue datagridview, afin que l'utilisateur final puisse le modifier ?
-
14-11-2019 - |
Question
Comment pouvons-nous lier une vue de grille de données à certaines des propriétés My.Settings (portées sur l'utilisateur) afin que l'utilisateur puisse modifier les valeurs ?Cela doit être dans une vue de grille de données.Je sais que nous pouvons nous lier à My.Settings sous une forme avec des zones de texte, etc., mais dans ce cas, nous le voulons simplement sous forme de liste de chaînes modifiables dans une vue de grille de données.
Bien sûr, certaines entrées My.Settings peuvent avoir des types de données différents, ce qui complique les choses, mais en général nous travaillons uniquement avec des chaînes et des booléens.
Supposons également que l'utilisateur comprenne qu'il doit saisir la chaîne "true" pour définir un booléen sur true.Aucune colonne de case à cocher n’est nécessaire.
Voici ce que nous utilisons (et cela fonctionne), simplement à la recherche d'une méthode meilleure et plus simple :
voici la classe :
Public Class MySettingsMaint
...
alors nous avons une liste de liaisons (c'est probablement beurk) :
Private list As BindingList(Of BindingKeyValuePair)
voici à quoi se lie le 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
plus de beurk ici, pour sauvegarder dans 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
la classe privée requise par la classe ci-dessus :
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
La solution
Vous devriez utiliser le Contrôle PropertyGrid?Cela aidera à soutenir des types de propriétés plus riches.