【问题标题】:How Update cell in datagridview after enter? vb.net进入后如何更新datagridview中的单元格? vb.net
【发布时间】:2013-03-14 15:31:30
【问题描述】:

我想在输入单元格后将值从 datagridview 更新到 sql。但它不起作用。

此代码:

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 wfDivision=@wfDivision,wfSection=@wfSection,wfPosition=@wfPosition,wfBaht=@wfBaht")
                sb3.Append(" FROM PositionLevelWelfare pw")
                sb3.Append(" WHERE pw.Run=@Run")
                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

感谢您的游览时间。 :)

【问题讨论】:

  • 哪里出错了?你试过什么?
  • 没有错误,也没有任何反应。我使用带有按钮的代码它的工作。但我尝试更改按键它不起作用。我不知道为什么它不起作用。
  • 您应该将更改保存在 AfterEdit() 或 EndUpdate() 上(我不记得确切的名称)。 AFAIK 单元格上的文本在您结束编辑之前不会更新,因此 dgvShow.Rows(i).Cells(X).Value 绑定到“旧”值。

标签: vb.net sql-server-2008 data-binding datagridview keypress


【解决方案1】:

您可以使用事件DataGridView.CellBeginEdit 和DataGRidView.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 函数 记住CellValidating 出现在CellEndEdit 之前

MSDN DataGridView.CellValidating Event

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2011-12-25
    相关资源
    最近更新 更多