Le meilleur moyen de lier My.Settings à une vue datagridview, afin que l'utilisateur final puisse le modifier ?

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

  •  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
Était-ce utile?

La solution

Vous devriez utiliser le Contrôle PropertyGrid?Cela aidera à soutenir des types de propriétés plus riches.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top