오브젝트 데이터 소스에 바인드 된 양식이 있습니다. 하나의 텍스트 상자와 하나의 콤보 상자가 있습니다. 기본 객체에 대해 하나의 바인딩 소스를 설정하고 콤보 상자에 대해 하나의 바인딩 소스를 설정했습니다. 양식을 실행하면 텍스트 상자가 올바르게 바인딩되고 콤보 상자의 값 목록이 올바르게 바인딩되지만 콤보 상자의 ValueMember가 올바르게 작동하지 않습니다.콤보 박스를 오브젝트 데이터 소스에 바인딩하기
콤보 상자에 올바른 목록이 표시되지만 선택한 색인은 0이어야합니다. 2. 텍스트 상자의 값을 변경하면 바인딩 된 개체의 Property.Set 메서드가 올바르게 호출되지만 동일합니다 콤보 상자에는 Property.Set 메서드가 호출되지 않습니다.
폼에서 OnSelectedIndex 변경 메서드를 해킹 할 수 있지만 내가 바인딩을 사용하여 잘못하고 있는지 알고 싶습니다. 여기
는 폼의 코드입니다 : 여기에 주요 개체에 대한 코드의Public Class Form1
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim NameValueBindingSource1 As New BindingSource()
Dim WorkOrderBindingSource1 As New BindingSource
'Create main object to bind to
Dim wo As New WorkOrder
wo.WOIndex = "2012-0111"
wo.WorkOrderType = 3
'Create list object for combo box
Dim NameValues As BindingList(Of NameValue)
NameValues = FillNameValueList()
'Bind Text Box to Binding Source
WorkOrderBindingSource1.DataSource = wo
WOIndexTextBox1.DataBindings.Add("Text", WorkOrderBindingSource1, "WOIndex")
'Bind Combo Box to Binding Source
NameValueBindingSource1.DataSource = NameValues
WorkOrderTypeCombo.DataSource = NameValueBindingSource1
WorkOrderTypeCombo.DisplayMember = "Value"
WorkOrderTypeCombo.ValueMember = "Code"
End Sub
Function FillNameValueList() As BindingList(Of NameValue)
Dim bl As New BindingList(Of NameValue)
Dim nv As NameValue
nv = New NameValue
bl.Add(New NameValue("Short", 0))
bl.Add(New NameValue("Middle", 1))
bl.Add(New NameValue("Long", 2))
bl.Add(New NameValue("Very Long", 3))
Return bl
End Function
End Class
- "WorkOrder"여기
Imports System.ComponentModel
Public Class WorkOrder
Implements IEditableObject
Implements INotifyPropertyChanged
Private mWOIndex As String
Private mWorkOrderType As Integer
Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Public Property WOIndex As String
Get
Return mWOIndex
End Get
Set(value As String)
mWOIndex = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("WOIndex"))
End Set
End Property
Public Property WorkOrderType As Integer
Get
Return mWorkOrderType
End Get
Set(value As Integer)
mWorkOrderType = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("WorkOrderType"))
End Set
End Property
Public Sub BeginEdit() Implements System.ComponentModel.IEditableObject.BeginEdit
End Sub
Public Sub CancelEdit() Implements System.ComponentModel.IEditableObject.CancelEdit
End Sub
Public Sub EndEdit() Implements System.ComponentModel.IEditableObject.EndEdit
End Sub
End Class
콤보 상자에 사용되는 개체에 대한 코드 것
Imports System.ComponentModel
Public Class NameValue
Implements IEditableObject
Implements INotifyPropertyChanged
Private mValue As String
Private mCode As Integer
Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Public Property Code As Integer
Get
Return mCode
End Get
Set(value As Integer)
mCode = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Code"))
End Set
End Property
Public Property Value As String
Get
Return mValue
End Get
Set(value As String)
mValue = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Value"))
End Set
End Property
Public Sub BeginEdit() Implements System.ComponentModel.IEditableObject.BeginEdit
End Sub
Public Sub CancelEdit() Implements System.ComponentModel.IEditableObject.CancelEdit
End Sub
Public Sub EndEdit() Implements System.ComponentModel.IEditableObject.EndEdit
End Sub
Public Sub New(InitValue As String, InitCode As Integer)
Value = InitValue
Code = InitCode
End Sub
End Class
하는 데 도움이
희망 :
당신은 (여기에 사용하여 C#을)이 같은 라인이 필요합니다. 너를 돕기 위해 나를 따라하기가 어렵다. 문제의 핵심 요소에 이르기까지 그것을 제거 할 수 있습니까? 어쩌면 당신은 단지 그렇게함으로써 해결책을 찾을 수있을 것입니다. – danyim
더 이상 단순화 할 수 있을지 확신하지 못합니다. 최소한의 문제는 2 개의 객체, 바인딩 목록 및 양식이 필요합니다. 바인딩은 데이터 세트를 사용하여 정상적으로 작동하지만 데이터 소스로 객체를 사용하여 실패하는 것 같습니다. 이 양식의 코드는 꽤 간단합니다 (IMHO). 필요한 경우 코드의 일부를 설명하면 도움이 될 것입니다. – ccampj
콤보 박스의 실제 데이터 바인딩을 어디에 설정했는지는 알 수 없습니다. 코드 샘플에서 누락 되었습니까? –