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

Sql Windows窗体没有从我的数据库获取更新?,sql,database,vb.net,linq,Sql,Database,Vb.net,Linq,我最近才开始摆弄Visual Basic Express和Sql数据库 我设法建立并运行了一个数据库,可以从中查询信息。我甚至创建了一个表单,可以在im使用的表中添加一个新条目 第一个表单有一个组合框,列出我的表中的playername。Form2允许您向表中添加新名称,但我添加的任何内容在Form1中都不会立即更新。我必须重新启动程序才能看到新的条目。即便如此,这些新条目似乎并不像最终出现的那样是永久性的 我对Form1的代码是: Public Class Form1 Private Sub

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

我设法建立并运行了一个数据库,可以从中查询信息。我甚至创建了一个表单,可以在im使用的表中添加一个新条目

第一个表单有一个组合框,列出我的表中的playername。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
末级

表格2的代码:

   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

不确定这里出了什么问题…任何帮助都将不胜感激。如果我忽略了一个显而易见的答案,请原谅,我不确定我需要寻找什么。

你从来没有告诉Form1更新它的列表

这就是现在正在发生的事情:

  • 表1\u荷载
    • 填充玩家列表
  • 用户按下btnCreate(点击btnCreate)。
    • btnCreate启动frmNewPlayer(我假设它是“Form2”)
  • 用户按下btnCPlayer(btnCPlayer\u单击)。
    • btnCPlayer在列表中插入播放机
    • btnCPlayer关闭Form2
  • 在这一点上,你已经完成了你的操作流程,但是Form1从来没有得到过新玩家加入的消息。除Form1启动时(Form_Load事件/方法仅在首次加载时被调用)外,也没有任何代码会使列表重新加载

    您需要(选择一个):

    • 将Form2作为“模式”窗口启动,这意味着它会阻止Form1执行任何操作,直到关闭为止。这将允许您在Form2关闭后检查其内部的更新
    • Form2通知Form1已添加玩家的一种方式(“事件”)
    • 设置刷新列表的内容(可能使用“计时器”)
    模态方法将是最简单的。

    这应该可以做到。但是你需要做一些阅读。。。
    感谢您的回复!我按照你的建议添加了代码,但是form1仍然没有更新。我已经在网上搜索了好几个小时,试图在LINQtoSQL上找到一个好的资源,你发送的任何引用都会很棒。这个列表仍然包含我手动输入数据库的3个条目。它不清楚…好吧,我一直在读一些类似的问题,我想你必须包括PrimaryKey,否则linq不会保存数据。将下一个唯一标识符分配给新条目的最佳方法是什么?我通过使用以下代码修复了更新问题:Private Sub btnCreateP_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnCreateP。单击frmNewPlayer.ShowDialog()填充_player_list()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