如何解决组合框的双向数据绑定VB.Net
我正在尝试进行双向组合框装订工作。我有一个类用作组合框的源,我将组合框的选定项/值绑定到数据表,并且数据表通过绑定源绑定到数据网格视图。它的工作原理,但并不像我期望的那样。我想实现两件事。
- 在组合框中选择更改后立即更新“数据表网格”视图(强制更新数据)
- 将绑定添加到“年龄”列
这是我的代码。正确的做法是什么。任何帮助将不胜感激。谢谢
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 举报,一经查实,本站将立刻删除。