首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含两个Vb.Net bindingSources的详细信息的bindingSources更新表单

包含两个Vb.Net bindingSources的详细信息的bindingSources更新表单
EN

Stack Overflow用户
提问于 2014-02-19 19:12:39
回答 1查看 1.1K关注 0票数 0

我有一张从两张桌子上装载汽车和保险细节的表格。看看这个关系:

CarId和insID是自动增量字段。

以下是表单的外观:

很容易说,每辆车每年都有保险,而且它也有一个现行的保险ID。

以下是从数据库加载数据的方式:

代码语言:javascript
运行
复制
sql = "select * from car order by carId"
daCar = New OleDbDataAdapter(sql, oledbConn)
daCar.Fill(dsDataSet, "car")

sql = "select * from carInsurance order by carId"
daInsurance = New OleDbDataAdapter(sql, oledbConn)
daInsurance.Fill(dsDataSet, "insurance")

其约束力如下:

代码语言:javascript
运行
复制
bsCar = New BindingSource(dsDataSet, "car")
bsInsurance = New BindingSource(dsDataSet, "insurance")

CarIDTextBox.DataBindings.Add(New Binding("text", bsCar, "carId"))
BrandTextBox.DataBindings.Add(New Binding("text", bsCar, "brand"))
ModelTextBox.DataBindings.Add(New Binding("text", bsCar, "model"))
RegNoTextBox.DataBindings.Add(New Binding("text", bsCar, "regNo"))
InsIDTextBox.DataBindings.Add(New Binding("text", bsCar, "insId"))
.....
InsIDTextBox1.DataBindings.Add(New Binding("text", bsInsurance, "insId"))
CarIDTextBox1.DataBindings.Add(New Binding("text", bsInsurance, "carId"))
InsFromDateDateTimePicker.DataBindings.Add(New Binding("text",bsInsurance, "insFromDate"))
InsToDateDateTimePicker.DataBindings.Add(New Binding("text", bsInsurance, "insToDate"))
...
dgvInsurance.DataSource = bsInsurance ' dsDataSet.Tables("insurance")
bsInsurance.Filter = "carId=" & CarIDTextBox.Text
bsInsurance.Position = bsInsurance.Find("insId", InsIDTextBox.Text)

以这种方式增加新车:

代码语言:javascript
运行
复制
bsCar.AddNew()
bsInsurance.AddNew()
bsInsurance.Filter = "carId=0"

现在问题是在保存按钮:我的想法是保存新车,并立即获得新的carID,并将carID文本框设置为这个号码的汽车和保险细节。然后保存保险表,从数据库中获取新的insId,并将insId文本框设置为用于汽车和表单保险部分的新insId。最后,用新的insId再次保存汽车表,这使得整个关系都被填满了。这是保存代码:

代码语言:javascript
运行
复制
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

If carMode = "newCar" Then
      Try

          AddHandler daCar.RowUpdated, New OleDbRowUpdatedEventHandler(AddressOf getNewCarID)
          AddHandler daInsurance.RowUpdated, New OleDbRowUpdatedEventHandler(AddressOf getNewInsID)

          Me.Validate()

          bsCar.EndEdit()
          cbCar = New OleDbCommandBuilder(daCar)
          daCar.Update(dsDataSet.Tables("car"))

          CarIDTextBox.Text = newCarID
          CarIDTextBox1.Text = newCarID

          MsgBox("")

          bsInsurance.EndEdit()
          cbInsurance = New OleDbCommandBuilder(daInsurance)
          daInsurance.Update(dsDataSet.Tables("insurance"))

          InsIDTextBox.Text = newInsID
          InsIDTextBox1.Text = newInsID

          MsgBox("")

          RemoveHandler daCar.RowUpdated, AddressOf getNewCarID
          RemoveHandler daInsurance.RowUpdated, AddressOf getNewInsID

          bsCar.EndEdit()
          daCar.Update(dsDataSet.Tables("car"))

          MsgBox("Car saved successfully")

       Catch ex As Exception
            MsgBox(Err.Description)
       End Try

    End If

End Sub

Sub getNewCarID(ByVal sender As Object, ByVal e As OleDb.OleDbRowUpdatedEventArgs)
        ' Check if we are working for a row with the proper state
        If e.Row.RowState = DataRowState.Added Then
            Dim cmd = New OleDbCommand("SELECT @@IDENTITY", e.Command.Connection)
            newCarID = DirectCast(cmd.ExecuteScalar(), Integer)
        End If
    End Sub

    Sub getNewInsID(ByVal sender As Object, ByVal e As OleDb.OleDbRowUpdatedEventArgs)
        ' Check if we are working for a row with the proper state
        If e.Row.RowState = DataRowState.Added Then
            Dim cmd = New OleDbCommand("SELECT @@IDENTITY", e.Command.Connection)
            newInsID = DirectCast(cmd.ExecuteScalar(), Integer)
        End If
    End Sub

上述代码不能正常工作。在我打印了一条消息以查看表单的值之后,我发现一些字段值消失了,并且没有按我的意愿设置!解决我的问题的最佳代码序列是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-21 08:11:27

这是因为“添加新”按钮中的行bsInsurance.Filter = "carId=0"。因此,当我添加新记录时,一切正常工作,数据被保存到数据库中,但由于过滤器没有设置为新的insId,所以它消失了。所以在保存按钮中添加bsInsurance.Filter = "carId=" & newInsId

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21890099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档