1

我有一个包含来自多个数据库的数据的 DataGridView。除了三列之外,所有列都是只读的。三个可编辑的列都来自同一个表,这是唯一需要通过 DGV 编辑的表。

以下是我用来保存在 DGV 中所做更改的更新过程:

Public Sub UpdateScheduleData()
    Try
        If IgnoreInput Then Exit Sub

        Conn = GetConnect()
        Conn.Open()

        cmdSQL = New SqlCommand("Update Orders_Open Set JobStartDate = @JobStartDate, JobCompleteDate = @JobCompleteDate, LoadDate = @LoadDate, Status = @Status Where OrderID = @OrderID", daSchedule.SelectCommand.Connection)

        cmdSQL.Parameters.Add(New SqlParameter("@OrderID", SqlDbType.VarChar))
        cmdSQL.Parameters("@OrderID").Value = dgSchedule.Rows(LastEditedRow).Cells("Order ID").Value.ToString

        cmdSQL.Parameters.Add(New SqlParameter("@JobStartDate", SqlDbType.VarChar))
        If dgSchedule.Rows(LastEditedRow).Cells("Job Start").Value.ToString <> "" Then
            cmdSQL.Parameters("@JobStartDate").Value = dgSchedule.Rows(LastEditedRow).Cells("Job Start").Value.ToString
        Else
            cmdSQL.Parameters("@JobStartDate").Value = DBNull.Value
        End If

        cmdSQL.Parameters.Add(New SqlParameter("@JobCompleteDate", SqlDbType.VarChar))
        If dgSchedule.Rows(LastEditedRow).Cells("Job Complete").Value.ToString <> "" Then
            cmdSQL.Parameters("@JobCompleteDate").Value = dgSchedule.Rows(LastEditedRow).Cells("Job Complete").Value.ToString
        Else
            cmdSQL.Parameters("@JobCompleteDate").Value = DBNull.Value
        End If

        cmdSQL.Parameters.Add(New SqlParameter("@LoadDate", SqlDbType.VarChar))
        If dgSchedule.Rows(LastEditedRow).Cells("Load Date").Value.ToString <> "" Then
            cmdSQL.Parameters("@LoadDate").Value = dgSchedule.Rows(LastEditedRow).Cells("Load Date").Value.ToString
        Else
            cmdSQL.Parameters("@LoadDate").Value = DBNull.Value
        End If

        daSchedule.UpdateCommand = cmdSQL
        daSchedule.Update(dtSchedule)
        Conn.Close()

    Catch ex As Exception
        MessageBox.Show("Error: " & ex.Source & ": " & ex.Message, System.Reflection.MethodInfo.GetCurrentMethod.ToString, MessageBoxButtons.OK)
        LogErrors(System.Reflection.MethodInfo.GetCurrentMethod.ToString & " -- " & ex.Message)

    End Try
End Sub

我已经尝试从几个不同的事件中调用此过程,但唯一似乎正常工作的是当我单击数据库中的不同行时发生的 RowValidated 事件。这对用户不是很友好,因为用户通常希望设置日期并立即打印反映这些日期的工作订单。必须单击另一个订单然后返回到他们尝试使用的订单是不方便的,并且没有必要。

但是,我尝试过的所有其他事件(CellEndEdit、CellValidated、CellLeave 等),更新都不会进入数据库。我设置了一个中断,daSchedule.Update(dtSchedule)数据表总是反映正确的数据,但数据库中没有任何变化。

作为记录,LastEditedRow 使用 . 在 CellBeginEdit 事件中设置LastEditedRow = dgSchedule.CurrentRow.Index。我已经多次执行 UpdateScheduleData 过程,并且添加到参数的值始终正确,没有发生异常,执行 DataAdapter.Update 命令时数据库根本无法更新,除非用户单击了另一行.

即使数据表显示正确的数据,我做错了什么也会阻止数据库更新?

4

0 回答 0