访问bindingsource

时间:2017-03-09 18:37:51

标签: vb.net listbox user-controls bindingsource

我正在创建一个简单的卡片分类应用程序。用户应该能够创建列表框并在其中添加/删除/移动项目。 我有3个类,如CardsCollection>卡>卡 我还创建了一个带有标签和列表框的用户控件。 当用户通过从另一个列表框中拖动项目来创建新的排序组时,会在CardsCollection中创建一个新的Cards对象,一个链接到它的绑定源,以及一个绑定到此绑定源的列表框的新用户控件(CardsControl): p>

 Private Sub flPanel_DragDrop(sender As Object, e As DragEventArgs) Handles flPanel.DragDrop

        Dim strtitle = InputBox("Create new sort group", "Enter group title", "New group")

        If Not strtitle = "" Then

            Dim cc As New CardsControl
            cc.CardsTitle.Text = strtitle
            Dim ls As ListBox = cc.lsCards

            Dim cards As New cards
            Dim card As card = lsCards.SelectedItem
            Dim bs As New BindingSource
            bs.DataSource = cards
            AllCards.cards.Remove(card)
            cards.cards.Add(card)
            flPanel.Controls.Add(cc)

            ls.DataSource = bs
            ls.DataSource = cards.cards
            ls.DisplayMember = "title"

        End If

    End Sub

由于用户控件是实时创建的,我无法将其代码添加到表单中,因此我需要管理用户控件中的所有内容。

我的控件中有以下代码:

Public Class CardsControl
    Private Sub lsCards_DragDrop(sender As Object, e As DragEventArgs) Handles lsCards.DragDrop
        Dim card As card = e.Data.GetData(GetType(card))
        lsCards.Items.Add(card) 'this doesn't work, because the list is data bound
    End Sub

    Private Sub lsCards_DragOver(sender As Object, e As DragEventArgs) Handles lsCards.DragOver

        If e.Data.GetDataPresent(GetType(card)) Then
            e.Effect = DragDropEffects.Move
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub
End Class

我用注释标记了代码。这里出了点问题,执行停止,没有错误信息,然后我返回主屏幕。 经过一些搜索,我发现我无法将项添加到数据绑定列表框中。所以,我的问题是,如何从用户控件中到达列表框数据源后面的卡片对象?

更新: 谢谢@LarsTech! 根据您的评论,我更新了我的代码,现在我可以使用数据源对象。我不得不将第二个“cards”对象移动到BindingSource的DataMember属性。 相关的行是:

    bs.DataSource = cards
    bs.DataMember = "cards"
    ls.DataSource = bs
    ls.DisplayMember = "title"

0 个答案:

没有答案