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



我最近才开始摆弄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

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

应该可以了。但是你需要做一些阅读…

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更新它的列表。

这是现在发生的事情:

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

你需要(选一个):

  • 启动Form2作为一个"模式"窗口,这意味着它阻止Form1做任何事情,直到它被关闭。这将允许你在Form2关闭后检查是否有更新。
  • Form2通知Form1它已经添加了一个播放器("事件")的方法。
  • 设置刷新列表(可能使用"定时器")。

模态方法是最简单的

相关内容

  • 没有找到相关文章

最新更新