【问题标题】:Windows Form not getting updates from my database?Windows 窗体没有从我的数据库中获取更新?
【发布时间】:2011-04-13 22:48:21
【问题描述】:

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

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

【问题讨论】:

    标签: sql database vb.net linq


    【解决方案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
    

    【讨论】:

    • 感谢您的回复!我已经按照您的建议添加了代码,但是 form1 仍然没有得到更新。我已经在网上搜索了几个小时,试图在 Linq to Sql 上找到一个好的资源,你发送的任何参考都很棒。
    • 该列表仍然包含我手动输入数据库的 3 个条目。它没有清除它......
    • 好的,我已经阅读了一些类似的问题,我想你必须包括 PrimaryKey 否则 linq 不会保存数据。将下一个唯一标识符分配给新条目的最佳方法是什么?
    • 我通过使用此代码修复了更新问题 Private Sub btnCreateP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreateP.Click frmNewPlayer.ShowDialog() populate_player_list() End Sub'
    【解决方案2】:

    您从未真正告诉 Form1 更新其列表。

    这就是现在发生的事情:

    1. Form1_Load
      • 填充您的玩家列表。
    2. 用户按下 btnCreate (btnCreate_Click)。
      • btnCreate 启动 frmNewPlayer(我假设它是“Form2”)。
    3. 用户按下 btnCPlayer (btnCPlayer_Click)。
      • btnCPlayer 将播放器插入到列表中。
      • btnCPlayer 关闭 Form2。

    此时,您已经完成了操作流程,但从未提示 Form1 已添加新播放器。除了 Form1 启动时(仅在第一次加载时调用 Form_Load 事件/方法),也没有任何代码会使列表重新加载。

    你需要(选择一个):

    • 将 Form2 作为“模态”窗口启动,这意味着它会阻止 Form1 在关闭之前执行任何操作。这将允许您在 Form2 关闭后检查它是否有更新。
    • Form2 通知 Form1 已添加播放器(“事件”)的一种方式。
    • 设置刷新列表(可能使用“计时器”)。

    模态方法是最简单的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多