0

過去 2 時間、あなたの質問とインターネット上の他の場所を調べましたが、問題の解決策がどこにも見つからないか、少なくとも理解できたとしてもわかりませんでした。これが冗長またはばかげているように見える場合は、事前にお詫び申し上げます。はっきりさせておきますが、問題は、私がどういうわけかアプローチを正しく実装していないということですが、それがどのように行われるべきかを理解しています(または理解していると思います)。

予定を表すカスタム オブジェクトを表示するフォームにグリッドビューがあります。データテーブルではなく予定オブジェクトにバインドしたい (これは成功した)。ただし、以下のアプローチでは、正しいように見えますが、グリッドに予定オブジェクトが表示されません。さらに、オブジェクトを bindingsource の内部リストに直接追加しても、グリッドビューのデータソースを直接 bindinglist に設定した場合と同様に、グリッドに表示されません。私は何が間違っているのか分かりません!助けてください、これはまったく意味がないようで、私を夢中にさせています。

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) は、列挙子を介してアダプターの項目 (予定) のコレクションを返します。私はこれをテストし、列挙子がアイテムを返すことを知っているので、問題はこれではありません。

4

2 に答える 2

3

オブジェクトのパブリック フィールドにバインドすることはできません。Microsoft が述べているように、「任意の共通言語ランタイム (CLR) オブジェクトのパブリック プロパティ、サブプロパティ、およびインデクサーにバインドできます。」msdn-バインディング ソースの概要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
于 2015-01-05T20:02:12.757 に答える
0

コードを単純化させてください:

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

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

End Sub

これを試して、どのようなエラーが発生するかお知らせください。最終的に BindingSource が必要になる可能性があることはわかっていますが、とりあえず、それを図から切り離して、どのように機能するかを見てみましょう。

于 2015-01-04T23:59:10.487 に答える