从多表绑定DataGridView更新数据库而不更改行

时间:2013-06-27 16:12:49

标签: vb.net sql-server-2000

我有一个DataGridView,它包含来自多个数据库的数据。除了三列之外的所有列都是ReadOnly。三个可编辑的列都来自同一个表,这是唯一需要通过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 = dgSchedule.CurrentRow.Index在CellBeginEdit事件中设置LastEditedRow。我已经多次遍历UpdateScheduleData过程,并且添加到参数的值始终是正确的,没有异常发生,数据库在执行DataAdapter.Update命令时根本无法更新,除非用户单击了另一行

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

0 个答案:

没有答案