【发布时间】:2012-01-31 18:28:53
【问题描述】:
在Insert 或Update 之后刷新DataGridView 控件时遇到问题。源代码:
从数据表中的表中获取所有行并设置到数据源:
Dim dt1 as DataTable = GetData("SELECT * FROM CLAIMSTATE ")
dataGrid.DataSource = dt1
如果 ID 被赋值则更新事件,如果不是则插入:
Private Sub dataGrid_RowLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dataGrid.RowLeave
Dim row As DataGridViewRow = CType(sender, DataGridView).Rows(e.RowIndex)
Dim query As New StringBuilder("")
If row.Cells(0).Value & "" = "" Then
query.Append("INSERT INTO CLAIMSTATE ")
query.Append("(CST_CODE, CST_LABEL, CST_POINTS)")
query.Append("VALUES ")
query.Append("(?, ?, ?)")
Else
query.Append("Update CLAIMSTATE ")
query.Append("SET CST_CODE = ?, ")
query.Append("CST_LABEL = ?, ")
query.Append("CST_POINTS = ? ")
query.Append("WHERE CST_ID = ? ")
End If
Dim command As New OdbcCommand(query.ToString(), con)
command.Parameters.Add("@cst_code", OdbcType.Char).Value = row.Cells(1).Value
command.Parameters.Add("@cst_label", OdbcType.NVarChar).Value = row.Cells(2).Value
command.Parameters.Add("@cst_points", OdbcType.Decimal).Value = row.Cells(3).Value
command.Parameters.Add("@cst_id", OdbcType.BigInt).Value = row.Cells(0).Value
Dim res As Integer = ExecuteNonQuery(command)
End Sub
Public Function GetData(ByRef sqlQuery As String) As DataTable
Dim command As New OdbcCommand(sqlQuery, con)
Try
If con.State = ConnectionState.Closed Then
con.ConnectionString = conString
con.Open()
End If
Using dr As OdbcDataReader = command.ExecuteReader()
Dim dt As New DataTable()
dt.Load(dr)
Return dt
End Using
'con.Close()
Catch ex As Exception
MsgBox(ex.Message)
con.Close()
Return Null
End Try
End Function
Public Function ExecuteNonQuery(ByRef command As OdbcCommand) As Integer
Dim result As Integer = 0
If con.State = ConnectionState.Closed Then
con.ConnectionString = conString
con.Open()
End If
'Dim command As New OdbcCommand(sqlQuery, conn)
Try
'command.Connection = con
'Dim cmd As New OdbcCommand( sqlQuery, conn)
result = command.ExecuteNonQuery()
Catch
result = 0
If con IsNot Nothing Then
con.Close()
command.Dispose()
End If
Finally
command.Dispose()
End Try
Return result
End Function
我尝试从表中获取所有记录并在方法结束时再次设置数据源,但它不起作用。
如果我输入代码:
dataGrid.Rows.Clear()
dataGrid.Columns.Clear()
dt1 = GetData("SELECT * FROM CLAIMSTATE ")
dataGrid.DataSource = dt1
在事件方法 RowLeave 结束时我收到此错误:
"操作无效,因为它会导致对 SetCurrentCellAddressCore 函数"
在 dataGrid.Rows.Clear() 上,但是如果我删除行代码 Rows.Clear() 和 Columns.Clear(),执行 dataGrid.DataSource = dt1 后的调试光标返回到事件方法的开头并执行一些在我收到一些错误“...对 SetCurrentCellAddressCore 函数的可重入调用”之后再次编码!
请帮帮我!
【问题讨论】:
标签: vb.net datagridview odbc datasource ibm-midrange