2013-03-14 74 views
0

我希望更新值从datagridview到sql后进入单元格。但它不起作用。如何在进入后更新datagridview中的单元格? vb.net

验证码:

Private Sub dgvShow_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles dgvShow.KeyPress 

Dim sb3 As New StringBuilder 
Dim da2 As New SqlDataAdapter 

For i As Integer = 0 To dgvShow.Rows.Count - 2 
      If dgvShow.Rows(i).Cells(0).Value IsNot Nothing Then 
       sb3.Remove(0, sb3.Length()) 
       sb3.Append("UPDATE PositionLevelWelfare ") 
       sb3.Append("SET [email protected],[email protected],[email protected],[email protected]") 
       sb3.Append(" FROM PositionLevelWelfare pw") 
       sb3.Append(" WHERE [email protected]") 
       Dim SqlEdit As String = "" 
       SqlEdit = sb3.ToString() 

       da2.SelectCommand.CommandText = SqlEdit 
       da2.SelectCommand.Parameters.Add("@Run", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(0).Value 
       da2.SelectCommand.Parameters.Add("@wfDivision", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(1).Value 
       da2.SelectCommand.Parameters.Add("@wfSection", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(2).Value 
       da2.SelectCommand.Parameters.Add("@wfPosition", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(3).Value 
       da2.SelectCommand.Parameters.Add("@wfBaht", SqlDbType.NVarChar).Value = dgvShow.Rows(i).Cells(4).Value 
       da2.SelectCommand.ExecuteNonQuery() 
       da2.SelectCommand.Parameters.Clear() 
      End If 
     Next 
End Sub 

感谢游览时间。 :)

+0

哪里错误CellValidating发生?你有什么尝试? – Jaxedin 2013-03-14 15:37:20

+0

没有错误,没有任何事情发生。我使用代码与按钮它的工作。但我尝试改变按键它不工作。我不知道为什么它不起作用。 – nettoon493 2013-03-14 15:43:39

+0

您应该将更改保存到AfterEdit()或EndUpdate()(我不记得确切的名称)。 AFAIK单元格上的文本不会更新,直到您结束编辑为止,因此dgvShow.Rows(i).Cells(X).Value绑定到“旧”值。 – Jaxedin 2013-03-14 15:58:08

回答

1

您可以使用活动DataGridView.CellBeginEditDataGRidView.CellEndEdit 然后按Enter键或当你离开当前小区后的值更新(点击其他细胞..)

DataGridView.CellBeginEdit

处理程序在此处理程序中,我们只保存单元格的当前(旧)值 在此示例中,我使用DataGridView.Tag属性作为保存旧值的位置

Private Sub dgv_CellBeginEdit(sender As Object, e As DataGridViewCellCancelEventArgs) Handles dgv.CellBeginEdit 
    If e.RowIndex < 0 OrElse e.ColumnIndex < 0 Then Exit Sub 
    Me.dgv.Tag = Me.dgv.CurrentCell.Value 
End Sub 

然后在DataGRidView.CellEndEdit

Private Sub dgv_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellEndEdit 

    'Here you will get a new value of cell from dgv.CurrentCell.Value and compare with old value from dgv.Tag 
    'You can add your checks for new value if you need. If some check fails just set 
    dgv.CurrentCell.Value = dgv.Tag 
    'If checks succeed then run your update to Database function with new value 


End Sub 

或者处理程序,您可以使用dgv.CellValidating事件,在那里,如果你需要,你可以用你的支票新的价值和Cancel变化。而在这之后的突出部分CellEndEdit运行UpdateTodatabase功能 记得以前CellEndEdit

MSDN DataGridView.CellValidating Event

相关问题