关于数据库update的问题 里面包含整个过程代码
Public Class DataN1CheckDim N1OldRowIndex As Integer = 0
Dim N1Count As Integer = 0
''窗体初始化
Private Sub DataN1Check_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.N1CheckTableAdapter.FillByNoCheck(Me.PMDataSet.N1Check, False)
N1CheckDataGridView.Sort(N1C订单号码, System.ComponentModel.ListSortDirection.Ascending)
Me.N1TableAdapter.FillByNoColorCheck(Me.PMDataSet.N1, False)
N1DataGridView.Sort(N1订单号码, System.ComponentModel.ListSortDirection.Ascending)
N1CheckDataGridView.Columns("N1C标准加投").DefaultCellStyle.Format = "P1"
N1CheckDataGridView.Columns("N1C订单加投").DefaultCellStyle.Format = "P1"
N1CheckDataGridView.Columns("N1C实际加投").DefaultCellStyle.Format = "P1"
Me.MdiParent = Main
Me.FinishTableAdapter.FillByN1(Me.PMDataSet.Finish, 0)
End Sub
''保存N1表
Private Sub N1BindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorSaveItem.Click
SaveN1() ''步骤一 保存符合要求的每缸胚检量
CheckN1() ''步骤二 对于符合要求的N1Check记录 更改背景色高亮显示
End Sub
Private Sub SaveN1() ''【步骤一 保存符合要求的每缸胚检量】
Me.Validate()
Me.N1BindingSource.EndEdit()
Me.N1TableAdapter.Update(Me.PMDataSet.N1)
Me.PMDataSet.N1.AcceptChanges()
End Sub
Private Sub CheckN1() ''【步骤二 对于符合要求的N1Check记录 更改背景色高亮显示】
For Each N1CheckRow As PMDataSet.N1CheckRow In PMDataSet.N1Check.Rows
N1CheckRow.胚检量 = 0
N1CheckRow.合计缸数 = 0
Next
For Each N1Row As PMDataSet.N1Row In PMDataSet.N1.Rows
If N1Row.单缸审核 Then
For Each N1CheckRow As PMDataSet.N1CheckRow In PMDataSet.N1Check.Rows
If N1Row.订单号码 = N1CheckRow.订单号码 And N1Row.色号 = N1CheckRow.色号 Then
N1CheckRow.胚检量 += N1Row.胚检量
N1CheckRow.差异 = N1CheckRow.胚检量 - N1CheckRow.投胚量
N1CheckRow.合计缸数 += 1
Exit For
End If
Next
End If
Next
End Sub
''保存N1Check表
Private Sub BindingNavigatorSaveItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorSaveItem1.Click
SaveN1CheckOther()
SaveN1Check()
End Sub
Private Sub SaveN1CheckOther() ''步骤一 保存Finish表,计算胚检日,加投率等数据。。。
For Each N1CheckRow As PMDataSet.N1CheckRow In PMDataSet.N1Check.Rows
If N1CheckRow.审核 Then
Dim 胚检日期 As DateTime
If N1CheckRow.合计缸数 >= N1CheckRow.订单缸数 AndAlso N1CheckRow.合计缸数 > 0 Then
For Each N1Row As PMDataSet.N1Row In PMDataSet.N1.Rows
If N1Row.订单号码 = N1CheckRow.订单号码 AndAlso N1Row.色号 = N1CheckRow.色号 Then
N1Row.单色审核 = True
胚检日期 = N1Row.胚检日
If DateTime.Compare(胚检日期, N1Row.胚检日) < 0 Then
胚检日期 = N1Row.胚检日
End If
End If
Next
For Each FinishRow As PMDataSet.FinishRow In PMDataSet.Finish.Rows
If FinishRow.订单号码 = N1CheckRow.订单号码 AndAlso FinishRow.色号 = N1CheckRow.色号 Then
FinishRow.胚检量 = N1CheckRow.胚检量
FinishRow.胚检日 = 胚检日期
FinishRow.加投率 = N1CheckRow.实际加投
Exit For
End If
Next
N1CheckRow.胚检日 = 胚检日期
End If
End If
Next
SaveFinish()
End Sub
Private Sub SaveFinish()
Me.Validate()
Me.FinishBindingSource.EndEdit()
Me.FinishTableAdapter.Update(Me.PMDataSet.Finish)
Me.PMDataSet.Finish.AcceptChanges()
End Sub
Private Sub SaveN1Check() ''步骤二 保存N1Check表
Me.Validate()
Me.N1CheckBindingSource.EndEdit()
Me.N1CheckTableAdapter.Update(Me.PMDataSet.N1Check)
Me.PMDataSet.N1Check.AcceptChanges()
End Sub
Private Sub N1CheckDataGridView_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles N1CheckDataGridView.CellValueChanged
If N1CheckDataGridView.Columns(e.ColumnIndex).Name = "N1C胚检量" Then ''手动更改胚检量
N1CheckDataGridView("N1C差异", e.RowIndex).Value = N1CheckDataGridView("N1C胚检量", e.RowIndex).Value - N1CheckDataGridView("N1C投胚量", e.RowIndex).Value
Select Case N1CheckDataGridView("N1C单位", e.RowIndex).Value
Case "M"
N1CheckDataGridView("N1C实际加投", e.RowIndex).Value = (N1CheckDataGridView("N1C胚检量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value
Case "Y"
N1CheckDataGridView("N1C实际加投", e.RowIndex).Value = (N1CheckDataGridView("N1C胚检量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144
End Select
Exit Sub
End If
If N1CheckDataGridView.Columns(e.ColumnIndex).Name = "N1C投胚量" Then ''手动更改投胚量
N1CheckDataGridView("N1C差异", e.RowIndex).Value = N1CheckDataGridView("N1C胚检量", e.RowIndex).Value - N1CheckDataGridView("N1C投胚量", e.RowIndex).Value
Select Case N1CheckDataGridView("N1C单位", e.RowIndex).Value
Case "M"
N1CheckDataGridView("N1C订单加投", e.RowIndex).Value = (N1CheckDataGridView("N1C投胚量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value
Case "Y"
N1CheckDataGridView("N1C订单加投", e.RowIndex).Value = (N1CheckDataGridView("N1C投胚量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144
End Select
Exit Sub
End If
If N1CheckDataGridView.Columns(e.ColumnIndex).Name = "N1C审核" Then
If Not N1CheckDataGridView("N1C审核", e.RowIndex).Value Then
N1CheckDataGridView("N1C实际加投", e.RowIndex).Value = 0
N1CheckDataGridView("N1C订单加投", e.RowIndex).Value = 0
Exit Sub
End If
If N1CheckDataGridView("N1C胚检量", e.RowIndex).Value > 0 AndAlso N1CheckDataGridView("N1C投胚量", e.RowIndex).Value > 0 Then
If N1CheckDataGridView("N1C审核", e.RowIndex).Value Then
Select Case N1CheckDataGridView("N1C单位", e.RowIndex).Value
Case "M"
N1CheckDataGridView("N1C实际加投", e.RowIndex).Value = (N1CheckDataGridView("N1C胚检量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value
N1CheckDataGridView("N1C订单加投", e.RowIndex).Value = (N1CheckDataGridView("N1C投胚量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value
Case "Y"
N1CheckDataGridView("N1C实际加投", e.RowIndex).Value = (N1CheckDataGridView("N1C胚检量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144
N1CheckDataGridView("N1C订单加投", e.RowIndex).Value = (N1CheckDataGridView("N1C投胚量", e.RowIndex).Value - N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144) / N1CheckDataGridView("N1C分色量", e.RowIndex).Value * 0.9144
End Select
End If
Else
N1CheckDataGridView("N1C审核", e.RowIndex).Value = False
End If
End If
End Sub
''关闭窗体并保存记录
Private Sub DataN1Check_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If PMDataSet.HasChanges() Then
If MsgBox("是否保存对胚检量审核的更改? ", MsgBoxStyle.Exclamation + MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then
SaveN1()
SaveN1CheckOther()
SaveN1Check()
Else
e.Cancel = True
Exit Sub
End If
End If
Me.Dispose()
Me.Close()
End Sub
End Class --------------------编程问答-------------------- 太长了。。。帮顶。。。。。 --------------------编程问答-------------------- 你要干什么?有什么问题?
你的代码写得不好,至少可以将对数据库的操作封装起来,需要的时候每次调用即可,而不是操作数据库的代码随处可见。 --------------------编程问答-------------------- n1中的单缸审核是直接通过n1datagridview选中的 选中后保存到N1表中 同时更改n1checkdatagridview中的字段值 这个第一步
第二步 对于满足条件的记录 n1checkdatagridview 中 审核直接选中 并计算 订单加投 实际加投的值
并更改n1datagridview对应记录的单色审核 这几个字段都是用程序更改的,但是这些更改的值无法通过update保存到表中,实际上 如果用msgbox来显示计算后的值 都是已经改变了的。。。。。。。。。。。
请高手指教 我真的解决不了这个问题
在关闭窗体这个事件里 我不按保存按纽而直接关闭 dataset.haschange()也是为true的 但是后面
SaveN1()
SaveN1CheckOther()
SaveN1Check()
没有效果
dataset.haschange()为true表明dataset中行的状态有unchange 怎么就保存不了呢
补充:.NET技术 , VB.NET