Windows窗体没有从我的数据库获取更新?

时间:2011-04-13 22:48:21

标签: sql database vb.net linq

我最近才开始摆弄Visual Basic Express和Sql数据库。

我设法启动并运行数据库,并可以从中查询信息。我甚至创建了一个表单,可以使用。

向表中添加新条目

第一个表单有一个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

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

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题。但你需要做一些阅读......

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

答案 1 :(得分:0)

你永远不会告诉Form1更新它的列表。

现在正在发生这种情况:

  1. Form1_Load的
    • 填充您的玩家列表。
  2. 用户按btnCreate(btnCreate_Click)。
    • btnCreate启动frmNewPlayer(我假设是“Form2”)。
  3. 用户按btnCPlayer(btnCPlayer_Click)。
    • btnCPlayer将播放器插入列表中。
    • btnCPlayer关闭Form2。
  4. 此时,您完成了操作流程,但Form1从未被告知已添加新的播放器。也没有任何代码可以使列表重新加载,除非Form1启动时(Form_Load事件/方法仅在第一次加载时调用)。

    你需要(选择一个):

    • 将Form2作为“模态”窗口启动,这意味着它会阻止Form1执行任何操作,直到它关闭为止。这将允许您在Form2关闭后检查其中的更新。
    • Form2通知Form1已添加播放器(“事件”)的方法。
    • 设置要刷新列表的内容(可能使用“Timer”)。

    模态方法最简单。