2015-01-04 2 views
0

지난 두 시간 동안 인터넷상의 다른 곳에서도 귀하의 질문을 살펴 보았습니다. 문제가있는 곳에서는 해결책을 찾지 못했습니다. 그렇지 않으면 적어도 이해할 수 없었습니다. 이것이 불필요하게 보이거나 미친 듯이 보이면 미리 사과드립니다. 명확히하자 : 문제는 내가 어떻게 접근법을 올바르게 구현하지 못한다는 것이지만, 어떻게해야하는지 이해할 수있다.DataGridview에 사용자 지정 개체 목록을 바인딩 할 수없는 이유는 무엇입니까?

약속을 나타내는 사용자 지정 개체를 표시 할 양식에 gridview가 있습니다. 내 약속 객체에 바인딩하고 싶습니다 (성공했습니다). 그러나 아래의 방법은 올바른 것처럼 보이지만 약속 개체를 그리드에 표시하지 않습니다. 또한 바인딩 소스의 내부 목록에 개체를 직접 추가하면 GridList의 데이터 소스를 바인딩 목록에 직접 설정하는 것처럼 그리드에 표시 할 수 없습니다. 나는 내가 뭘 잘못하고 있는지 전혀 모른다! 제발 도와 줘,이게 전혀 말이되지 않는 것 같아서 나를 미치게합니다.

Public Sub DisplayItems() 

        Dim bindingsource As BindingSource 
        Dim appointment As ClsAppointment 
        Dim appointments As System.ComponentModel.BindingList(Of ClsAppointment) 
        Dim iterator As IEnumerator 

        appointments = New System.ComponentModel.BindingList(Of ClsAppointment) 
        bindingsource = New BindingSource 

        iterator = Items 
        While iterator.MoveNext ' 
          appointment = iterator.Current 
          appointments.Add(appointment) 

        End While 

        bindingsource.DataSource = appointments 
        gridview.DataSource = bindingsource 

        Debug.Print("") 
        Debug.Print("DisplayItems()...") 
        Debug.Print("GridView has " & gridview.Rows.Count & " rows") 


    End Sub 


Public Class ClsAppointment 

    Public FirstName As String 
    Public LastName As String 
    Public Day As String 
    Public [Date] As Date 
    Public Time As Date 
    Public Address As String 
    Public City As String 
    Public State As String 
    Public Zip As String 
    Public Description As String 

End Class 

=========================================== =============================

참고 : DisplayItems()는 단순함을 위해 표시하지 않기로 선택한 어댑터 (ItemEditor)의 메서드입니다. 다른 메서드 (Items)는 열거자를 통해 어댑터의 항목 (약속) 컬렉션을 반환합니다. 나는 이것을 시험해보고 열거자가 항목을 돌려 주므로 문제가 이것이 아니라는 것을 알았다.

답변

0

나를 당신의 코드를 단순화 할 수 있도록 허용 :

Public Sub DisplayItems() 
    gridview.DataSource = Me.Items() 

    Debug.Print("") 
    Debug.Print("DisplayItems()...") 
    Debug.Print("GridView has " & gridview.Rows.Count & " rows") 

End Sub 

이를 시도하고 우리가 당신이 무엇을 얻을 오류를 알려 주시기 바랍니다. 결국 BindingSource가 필요할 수도 있습니다.하지만 지금은 그 내용을 잘라내어 어떻게 작동하는지 봅시다.

+0

나는 노력이 원래 같은 결과. 문제는 내 개체 필드가 ​​속성 메서드로 선언되지 않았습니다. 감사. – Patternz

2

개체의 공개 입력란에 바인딩 할 수 없습니다. Microsoft는 "공통 언어 런타임 (CLR) 개체의 공용 속성, 하위 속성 및 인덱서에 바인딩 할 수 있습니다." Msdn- Binding Sources Overview. 이에 ClsAppointment 클래스를 변경 :

Public Class ClsAppointment 

    Property FirstName As String 
    Property LastName As String 
    Property Day As String 
    Property [Date] As Date 
    Property Time As Date 
    Property Address As String 
    Property City As String 
    Property State As String 
    Property Zip As String 
    Property Description As String 

End Class 
관련 문제