2013-08-30 3 views
0
나는 이것이 쉬운 일이 알고

설정,하지만 난 설정하는 데 문제 ComboBox.SelectedItem 이라니요 나는 다음과 같은 코드가 있다고 ....는 ComboBox.SeletectedItem VB.NET

Class InnerClass 
    Public InnerProperty As String 
End Class 

Class [Class] 
    Public [Property] As String 
    Public InnerClass As InnerClass 
End Class 

Private Sub Form_Load(ByVal sender As Object,ByVal e as EventArgs) 
    Dim cls as New [Class] 
    Dim innerCls as New InnerClass 
    Dim list as New BindingList(Of InnerClass) 

    list.Add(New InnerClass) 
    list.Add(New InnerClass) 
    list.Add(New InnerClass)  
    cls.InnerClass=list.Items(2) 
    ComboBox1.DataSource=list 
    ComboBox1.DisplayMember="InnerProperty" 
    ComboBox1.DisplayValue="InnerProperty" 
    ComboBox1.DataBindings.Add("SelectedItem",cls,"InnerClass") 'always displays 1st item 
    list.Add(innerCls) 
    ComboBox1.SelectedItem=innerCls 'No effect 
End Sub 

방법 어떻게합니까? ComboBox1.SelectedItem [Class] .InnerProperty에 올바르게 바인딩 되었습니까? 어떻게 설정합니까 ComboBox1.SelectedItem을 수동으로 만드시겠습니까?

+1

당신은 또한'DisplayMember'를 두 번 반복합니다, 나는 당신이 원하는 것이라고 생각하지 않습니다; 당신은 아마 그 라인 중 하나에 'ValueMember'를 원할 것이다. –

답변

1

데이터 바인딩은 필드가 아닌 속성에서만 작동합니다. ComboBox ValueMember 속성을 추가하고 SelectedValue 속성을 사용하도록 DataBinding을 변경했습니다. "클래스"라는 클래스와 "속성"이라는 속성을 만들지 않도록하십시오

Class InnerClass 
    Public Property InnerProperty As String 
End Class 

Class [Class] 
    Public Property [Property] As String 
    Public Property InnerClass As InnerClass 
End Class 

Protected Overrides Sub OnLoad(e As EventArgs) 
    MyBase.OnLoad(e) 

    Dim cls As New [Class] 
    Dim innerCls As New InnerClass 

    Dim list As New BindingList(Of InnerClass) 
    list.Add(New InnerClass With {.InnerProperty = "aaa"}) 
    list.Add(New InnerClass With {.InnerProperty = "bbb"}) 
    list.Add(New InnerClass With {.InnerProperty = "ccc"}) 
    cls.InnerClass = list(2) 
    ComboBox1.DisplayMember = "InnerProperty" 
    ComboBox1.ValueMember = "InnerProperty" 
    ComboBox1.DataSource = list 

    Dim bd As New Binding("SelectedValue", cls, "InnerClass.InnerProperty") 
    ComboBox1.DataBindings.Add(bd) 
End Sub 

보조 노트에 : 여기

는 수정 된 예입니다. 그들에게 실명을주십시오.

이 클래스를 사용하려면, 대신의 selectedItem를 사용하는 것 :

Dim bd As New Binding("SelectedItem", cls, "InnerClass") 
+0

cls.InnerClass가 아닌 cls.InnerClass.InnerProperty에 바인딩하고 싶습니다. –

+0

@SimbarasheMukodzani 그런 다음 바인딩 속성을 "SelectedItem"을 사용하도록 변경하십시오. 편집을 참조하십시오. – LarsTech

+0

Thanks LarsTech .... 감사합니다. 너희들 모두 –

0

을 어떻게 ComboBox1.SelectedItem 수동으로 설정합니까? 귀하의 경우에

ComboBox1.SelectedItem = Object 

"BBB - BBB"당신은 디스플레이 및 값 회원을 위해 같은 일을 사용하고 있기 때문에 나는 생각한다. ComboBox1.SelectedValue = "bbb"는 읽고 쉽게 입력 할 수 있습니다. 일반적으로 선택 값 또는 색인을 조작하는 것이 더 쉬우 며 오류가 발생하기 쉽습니다. 켄 화이트처럼 당신이 그것을 사용하기 위해 valuemember을 표현해야하지만 말했다.

+0

ValueMember는 DisplayMember와 동일하다. 내가 원하는 것은 사용자가 변경을 할 때 SelectedItem을 cls.InnerClass에 넣는 것이다. –

+0

코드가 혼란 스럽다. ,하지만 일반적으로 당신이 가치를 전달할 콤보 박스의 "빌드"에. 클래스에 "새"메소드가 있어야합니다. List.Add (InnerClass의 새 InnerClass ("aaa")와 같은 InnerClass의 메서드) : MyBase.New() Me.InnerProperty = sInnerProperty End Sub –