使用对话框的结果更新另一个窗体上的控件

时间:2012-02-29 03:50:40

标签: vb.net winforms combobox jet bindingsource

我创建了一个包含列表框(名为VenueList)的窗体。列表框从绑定源VenuesBindingSource提供的列表中提取它的值,该列表提取值的ID和文本的名称。

有一个按钮导致出现DialogBox,要求将值存储在数据库中以供新场地使用。填充值并插入数据库后,应该发生的是对话框关闭并返回到调用它的原始表单。

但是,而不是更新列表。列表保持不变。但是,如果您关闭表单并重新打开它,您会看到添加了一个新值。

    TournamentSettings.VenuesTableAdapter.InsertVenueQuery(Trim(VenueNameTxt.Text), Trim(VenueAddress1Txt.Text), Trim(VenueAddress2Txt.Text), Trim(VenueCityTxt.Text), Trim(VenueProvinceTxt.Text), Trim(VenueZipTxt.Text), Trim(CountryBox.SelectedValue), Trim(VenuePhoneNo.Text), VenueType.SelectedText, VenueWebAddress)
    TournamentSettings.VenuesTableAdapter.Fill(TournamentSettings.VenueNameList.Venues)
  • 在上面的代码中,InsertVenueQuery是来自设计器的查询的名称,该查询被调用以将值添加到tableadapter VenuesTableAdapter,用于在加载时填充组合框。我还发送了Fill命令,用新值重新填充表格。

所以问题是,我应该采取另一种方式,而不是提供表适配器并向数据表发送填充命令?或者有什么我不在这里做的事情,我应该将这个值强加到列表中。我很想重做设计师之外的所有事情,但是因为我必须基本上运行两个命令(一个用于插入数据,另一个用于获取@@ IDENTITY值,因为这是运行的)在访问数据库上。)

1 个答案:

答案 0 :(得分:0)

好。这个我不得不考虑一下。

我没有在load事件上创建一个完成块,而是创建了一个名为“FillVenueList”的子函数。

我使用了以下代码块:

Public Sub FillVenueList()
    ' Adding values from database to a datatable.
    ' From there will add to the list box. 
    Dim VenueConnection As New OleDb.OleDbConnection(DBconnection)
    VenueConnection.Open()
    Dim VenueConnectionQuery As New OleDb.OleDbCommand("SELECT VenueID, VenueName FROM Venues", VenueConnection)
    Dim VenueDataAdapter As New OleDb.OleDbDataAdapter(VenueConnectionQuery)
    Dim VenueDataSet As New DataSet
    VenueDataAdapter.Fill(VenueDataSet, "Venues")

    TrnVenueLst.DataSource = VenueDataSet.Tables("Venues")
    TrnVenueLst.DisplayMember = "VenueName"
    TrnVenueLst.ValueMember = "VenueID"
    VenueConnection.Close()
End Sub

从那里我在表格和添加地点窗口上调用了这个子,我可以安全地看到它的工作原理。这就是你如何在表单上获得一个新值,不要将它作为加载事件的一部分使用,而是从加载事件块中调用它,然后在你想要添加到列表时调用它。