2015-01-04 4 views
0

Я просматривал ваши вопросы, а также в других местах в Интернете в течение последних двух часов и не могу найти решение для своей проблемы нигде, или, по крайней мере, я не понял этого, если бы сделал это. Приносим извинения заранее, если это кажется излишним или бессмысленным. Позвольте мне пояснить: проблема в том, что я каким-то образом НЕ применяю подход правильно, но я понимаю (или думаю, что знаю), как это должно быть сделано.Почему я не могу привязать список настраиваемых объектов к datagridview?

У меня есть gridview в форме, в которой я хочу отображать пользовательские объекты, представляющие встречи. Я хочу привязать к моим объектам назначения, а не к datatable (который был успешным). Однако нижеприведенный подход не отображает мои объекты назначения в сетке, хотя выглядит корректно. Кроме того, добавление объектов непосредственно во внутренний список связующего источника также не может показать их в сетке, а также напрямую установить источник данных gridview в список привязки. Я понятия не имею, что я делаю неправильно! Пожалуйста, помогите, это, кажется, не имеет никакого смысла и сводит меня с ума.

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 
Смежные вопросы