Il modo migliore per legare i miei.settings a un DataGridView, quindi End User può modificare?

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

  •  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
.

È stato utile?

Soluzione

You should use the PropertyGrid control? It will help with regard to supporting richer property types.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top