Windows窗体无法从我的数据库获取更新?

问题描述

| 我只是最近才开始摆弄Visual Basic Express和sql数据库。 Ive设法建立并运行了一个数据库,并且可以从中查询信息。我什至创建了一个表单,可以使用im向表中添加新条目。 第一种形式有一个ComboBox,它在我的表中列出了PlayerNames。 Form2允许您向表中添加名称,但是我添加的任何内容都不会立即在Form1中更新。我必须重新启动程序才能看到新条目。即使那样,这些新条目似乎也不会永久存在,因为它们最终消失了。 我为Form1提供的代码
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load

    Dim db = New PlayerTestDataContextDataContext()
    Dim PlayerList = From List In db.Players
                     Select List.PlayerName

    For Each PName In PlayerList

        cbPList.Items.Add(PName)

    Next

End Sub


Private Sub btnCreate_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnCreate.Click

    frmNewPlayer.Show()

End Sub
末级 Form2的代码
   Private Sub btnCPlayer_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnCPlayer.Click

    Dim db = New PlayerTestDataContextDataContext()

    If txtNewPlayer.Text = \"\" Then
        lbWarning.Text = \"Please enter a name!\"
    Else
        Dim Plyr As New Player With {
            .PlayerName = txtNewPlayer.Text}
        db.Players.InsertOnSubmit(Plyr)
        db.SubmitChanges()
        Me.Close()

    End If

End Sub
不知道这里出了什么问题...感谢您的帮助。如果我在这里忽略了一个明显的答案,请原谅我,我不确定我需要寻找什么。     

解决方法

这应该够了吧。但是你需要做一些阅读...
Private Sub btnCreate_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnCreate.Click    
    if frmNewPlayer.ShowDailog() == DialogResult.Ok
        Dim db = New PlayerTestDataContextDataContext()
        Dim PlayerList = 
        From List In db.Players                     
        Select List.PlayerName  
        \' 
        cbpList.Items.Clear()
        \'
        For Each PName In PlayerList
            cbPList.Items.Add(PName)    
        Next
    end if
End Sub
    ,您实际上从未告诉Form1更新其列表。 这是现在正在发生的事情: Form1_Load 填充您的玩家列表。 用户按下btnCreate(btnCreate_Click)。 btnCreate启动frmNewPlayer(我假设它是\“ Form2 \”)。 用户按下btnCPlayer(btnCPlayer_Click)。 btnCPlayer将播放器插入列表中。 btnCPlayer关闭Form2。 至此,您已经完成了操作流程,但是尚未向Form1提示添加了新的Player。除了启动Form1时,没有任何代码可以重新加载列表(仅在第一次加载Form_Load事件/方法时)。 您需要(选择一个): 将Form2作为“模块”窗口启动,这意味着它会阻止Form1在关闭之前执行任何操作。这将使您可以在关闭Form2之后检查更新。 Form2通知Form1它已添加播放器(\“ Event \”)的方式。 设置一些内容以刷新列表(可能使用\“ Timer \”)。 模态方法将是最简单的。