微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

组合框的双向数据绑定VB.Net

如何解决组合框的双向数据绑定VB.Net

我正在尝试进行双向组合框装订工作。我有一个类用作组合框的源,我将组合框的选定项/值绑定到数据表,并且数据表通过绑定源绑定到数据网格视图。它的工作原理,但并不像我期望的那样。我想实现两件事。

  1. 在组合框中选择更改后立即更新“数据表网格”视图(强制更新数据)
  2. 将绑定添加到“年龄”列

这是我的代码。正确的做法是什么。任何帮助将不胜感激。谢谢

Imports System.ComponentModel
Imports System.Runtime.CompilerServices

Public Class Form1
    Implements INotifyPropertyChanged
    Public BS As New BindingSource
    Public ContactBL As BindingList(Of Contacts)

    Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load

        Dim contacts As New List(Of Contacts) From {
        New Contacts() With {.FirstName = "Name1",.LastName = "LName1",.Age = 50},New Contacts() With {.FirstName = "Name2",.LastName = "LName2",.Age = 39},New Contacts() With {.FirstName = "Name3",.LastName = "LName3",.Age = 30},New Contacts() With {.FirstName = "Name4",.LastName = "LName4",.Age = 66}}

        ContactBL = New BindingList(Of Contacts)(contacts)

        ComboBox1.DataSource = ContactBL
        ComboBox1.displayMember = "FirstName"
        ComboBox1.ValueMember = "LastName"


        Dim table As New DataTable("Tab1")
        table.Columns.Add("FirstName",GetType(String))
        table.Columns.Add("LastName",GetType(String))
        table.Columns.Add("Age",GetType(Integer))
        table.Rows.Add("Name3","LName3",30)
        table.Rows.Add("Name2","LName2",39)

        BS.DataSource = table
        DataGridView1.DataSource = BS

        ComboBox1.DataBindings.Add("SelectedValue",BS,"LastName",True,DataSourceUpdateMode.OnPropertyChanged)
        ComboBox1.DataBindings.Add("Text","FirstName",DataSourceUpdateMode.OnPropertyChanged)

        DataGridView2.DataSource = ContactBL

    End Sub

    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click

        Dim nr = CType(ComboBox1.SelectedItem,Contacts)

        Dim NewRow = DirectCast(BS.AddNew(),DaTarowView)
        NewRow("FirstName") = nr.FirstName
        NewRow("LastName") = nr.LastName
        NewRow("Age") = nr.Age
        BS.EndEdit()


    End Sub


    Private _FirstName As String
    Public Property FirstName() As String
        Get
            Return _FirstName
        End Get
        Set(ByVal value As String)
            _FirstName = value
            OnPropertyChanged()
        End Set
    End Property

    Private _LastName As String
    Public Property LastName() As String
        Get
            Return _LastName
        End Get
        Set(ByVal value As String)
            _LastName = value
            OnPropertyChanged()
        End Set
    End Property

    Private _Age As Integer
    Public Property Age() As Integer
        Get
            Return _Age
        End Get
        Set(ByVal value As Integer)
            _Age = value
            OnPropertyChanged()
        End Set
    End Property


    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    Protected Overridable Sub OnPropertyChanged(<CallerMemberName>
    Optional memberName As String = nothing)
        RaiseEvent PropertyChanged(Me,New PropertyChangedEventArgs(memberName))
    End Sub

    Sub BindingComplete(ByVal sender As Object,ByVal e As BindingCompleteEventArgs)

        If e.BindingCompleteContext = BindingCompleteContext.DataSourceUpdate AndAlso e.Exception Is nothing Then e.Binding.BindingManagerBase.EndCurrentEdit()

    End Sub

End Class


Public Class Contacts

    Implements INotifyPropertyChanged
    Private _firstName As String
    Private _lastName As String
    Private _Age As Integer

    Public Property ContactId() As Integer

    Public Property FirstName() As String
        Get
            Return _firstName
        End Get
        Set
            _firstName = Value
            OnPropertyChanged()
        End Set
    End Property
    Public Property LastName() As String
        Get
            Return _lastName
        End Get
        Set
            _lastName = Value
            OnPropertyChanged()
        End Set
    End Property
    Public Property Age() As Integer
        Get
            Return _Age
        End Get
        Set
            _Age = Value
            OnPropertyChanged()
        End Set
    End Property
    Public ReadOnly Property FullName() As String
        Get
            Return $"{FirstName} {LastName}"
        End Get
    End Property
    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    Protected Overridable Sub OnPropertyChanged(<CallerMemberName>
    Optional memberName As String = nothing)
        RaiseEvent PropertyChanged(Me,New PropertyChangedEventArgs(memberName))
    End Sub

End Class

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。