Il modo migliore per legare i miei.settings a un DataGridView, quindi End User può modificare?
-
14-11-2019 - |
Domanda
Come possiamo ottenere un databent a DataGridView a parte delle proprietà My.settings (USER SCOPED) in modo che l'utente possa modificare i valori? Questo deve essere a un datagridview. So che possiamo legarci a My.settings in una forma con caselle di testo e così via, ma in questo caso lo vogliamo semplicemente come elenco di stringhe modificabili in un datagridview.
Naturalmente alcune voci My.settings possono avere diversi tipi di tipi che complicano questioni ma in generale lavoreremo solo con stringhe e booleani.
Inoltre, supponiamo che l'utente capisca che deve entrare nella stringa "true" per impostare un booleano su true. Nessuna colonna di controllo è necessaria.
.
Ecco cosa stiamo usando (e funziona), basta cercare un modo migliore, più snello:
Ecco la classe:
Public Class MySettingsMaint
.
...
Allora abbiamo un elenco vincolante (questo è probabilmente yuk):
Private list As BindingList(Of BindingKeyValuePair)
.
Ecco cosa è il DataGridView si collega a:
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
.
Altro YUK qui, per salvare Torna a 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 privata richiesta dalla classe sopra indicata:
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
. Soluzione
You should use the PropertyGrid control? It will help with regard to supporting richer property types.