Связывание PropertyGrid - PullRequest
       14

Связывание PropertyGrid

0 голосов
/ 23 февраля 2019

В привязке нет ничего похожего PropertyGrid, поэтому я хотел бы попросить совета.Вот пример приложения:

enter image description here

В нем содержится простой набор данных:

    If dt.Columns.Count = 0 Then
        dt.Columns.Add("ID", GetType(Int32))
        dt.Columns.Add("MyString", GetType(String))
        dt.Columns.Add("MyCustomEnum", GetType(Int16))
    End If
    dt.Rows.Add({1, "Item One", 4})
    dt.Rows.Add({2, "Item Two", 16})
    dt.Rows.Add({3, "Item Three", 32})
    dt.Rows.Add({4, "Item Four", 4})
    dt.Rows.Add({5, "Item Five", 1})

, который связан с DataGridView1,NumericUpDown1, TextBox1 и ComboBox1.

    bs.DataSource = dt
    Me.dataGridView1.DataSource = bs

    Me.NumericUpDown1.DataBindings.Add("Value", bs, "ID")
    Me.textBox1.DataBindings.Add("Text", bs, "MyString")
    Me.ComboBox1.DataSource = CreateTableFromEnum(GetType(DataItem.GeneralAlignment))
    Me.ComboBox1.ValueMember = "key"
    Me.ComboBox1.DisplayMember = "text"
    Me.ComboBox1.DataBindings.Add("SelectedValue", bs, "MyCustomEnum")

Это просто для иллюстрации.Я создал класс со свойствами для PropertyGrid1:

<DefaultPropertyAttribute("DataItem")> Public Class DataItem
Public ID As Int32
Public MyString As String
Public MyCustomEnum As GeneralAlignment

Public Sub New(nID As Int32, nMyString As String, nMyCustomEnum As GeneralAlignment)
    ID = nID
    MyString = nMyString
    MyCustomEnum = MyCustomEnum
End Sub

<CategoryAttribute("General Properties"), Browsable(True), [ReadOnly](False), BindableAttribute(False), DefaultValueAttribute("0"), DesignOnly(False), DescriptionAttribute("ID"), DisplayName("ID")>
Public Property PropID() As Int32
    Get
        Return ID
    End Get
    Set(ByVal Value As Int32)
        ID = Value
    End Set
End Property

<CategoryAttribute("General Properties"), Browsable(True), [ReadOnly](False), BindableAttribute(False), DefaultValueAttribute(""), DesignOnly(False), DescriptionAttribute("Database datatype"), DisplayName("MyString")>
Public Property PropDataType() As String
    Get
        Return MyString
    End Get
    Set(ByVal Value As String)
        MyString = Value
    End Set
End Property

<CategoryAttribute("General Properties"), DefaultValueAttribute(""), DescriptionAttribute("Select column alignment"), DisplayName("MyCustomEnum")>
Public Property PropMyCustomEnum() As GeneralAlignment
    Get
        Return MyCustomEnum
    End Get
    Set(ByVal Value As GeneralAlignment)
        MyCustomEnum = Value
    End Set
End Property

Public Enum GeneralAlignment
    NotSet = 0
    TopLeft = 1
    TopCenter = 2
    TopRight = 4
    MiddleLeft = 16
    MiddleCenter = 32
    MiddleRight = 64
    BottomLeft = 256
    BottomCenter = 512
    BottomRight = 1024
End Enum

End Class

. Для демонстрации я загрузил некоторые примеры данных в PropertyGrid1 следующим образом:

Dim Prop As New DataItem(16, "Item Two", DataItem.GeneralAlignment.MiddleLeft)
Private Sub TestProps()
    Me.propertyGrid1.PropertySort = PropertySort.Categorized
    Me.propertyGrid1.SelectedObject = Prop
End Sub

Но как это сделать?Я связываю PropertyGrid1, чтобы отобразить строку из диспетчера валют BindingSource bs?Т.е. для отображения выбранных подробностей строки таблицы данных.

...