La mejor manera de atar a My.Settings a un DataGridView, por lo que el usuario final puede modificar?
-
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
Solución
You should use the PropertyGrid control? It will help with regard to supporting richer property types.