La mejor manera de atar a My.Settings a un DataGridView, por lo que el usuario final puede modificar?

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

  •  14-11-2019
  •  | 
  •  

Pregunta

¿Cómo podemos estar en DataGridView a algunas de las propiedades de MY.SETTINGS (SPOOPED) de MY.SETTINGS para que el usuario pueda editar los valores? Esto debe ser para un DataGridView. Sé que podemos atar a My.Settings en un formulario con los cuadros de texto, etc., pero en este caso solo lo queremos como lista de cadenas editables en un DataGridView.

Por supuesto, algunas entradas de My.Settings pueden tener diferentes tipos de datos que complican las cosas, pero en general solo estamos trabajando con cuerdas y booleanos.

Además, supongamos que el usuario entiende que debe ingresar a la cadena "VERDADERO" para establecer un booleano con verdadero. No se necesita una columna de casilla de verificación.


Esto es lo que estamos usando (y funciona), solo buscando una forma mejor y más delgada:

Aquí está la clase:

Public Class MySettingsMaint

...

Entonces tenemos una lista de enlace (esto es probablemente YUK):

Private list As BindingList(Of BindingKeyValuePair)

Esto es lo que el DataGridView se une 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

Más YUK AQUÍ, PARA GUARDAR A MI .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 clase privada requerida por la clase anterior:

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

¿Fue útil?

Solución

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top