当前位置:编程学习 > C#/ASP.NET >>

关于数据库update的问题 里面包含整个过程代码

Public Class DataN1Check
    Dim 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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,