- 在DataGrid程序中批量修改数据
要达到的效果是使DataGrid里的数据修改可以像Excel一样方便易用。
具体步骤如下:
(1)DataGrid绑定到DataView
(2)使DataGrid处于可以编辑状态下,DataView处于允许编辑,新增状态
(3)编辑数据
(4)编辑完毕后,移开焦点,这步很关键,如果不移开焦点,当前修改的哪个单元格 就被认为数据没有修改,具体的操作如下:
Dim a As Integer
a = Me.DataGrid3.CurrentRowIndex + 1
Me.DataGrid3.CurrentCell = New DataGridCell(a, 10)
其中的10 要根据读进来的数据进行改变
(5)检查DataGrid的数据是否被修改,如果有就执行第 (6)步,否则到此结束。
检查的操作如下:
If objDs.HasChanges(DataRowState.Modified) = False Then
MsgBox("沒有數據被修改", MsgBoxStyle.OKOnly, "數據保存")
Exit Sub
End If (6)利用SqlDataAdapter的Update来更新数据
具体操作如下
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
Public Function SaveData()Function SaveData(ByVal strSql As String, ByVal isAdd As Boolean, ByVal objDs As DataSet, ByVal objTb As String) As Boolean 'strSql是包含主键,要修改的字段的Sql语句,isAdd 是表示是否新增数据,objDs 是绑定到DataGrid的数据集,objTb 是绑定到Datagrid的DataTabel的表名
If isAdd = True Then
Try
objDaValue = New SqlClient.SqlDataAdapter(strSql, strConn)
Dim objCb As SqlClient.SqlCommandBuilder
objCb = New SqlClient.SqlCommandBuilder(objDaValue)
If objDs.HasChanges(DataRowState.Added) Then
objDaValue.Update(objDs, objTb)
Return True
Else
Return False
End If
Catch
Return False
End Try
Else
objDaValue.ContinueUpdateOnError = True
Try
objDaValue = New SqlClient.SqlDataAdapter(strSql, ws.GetConnStr)
Dim objCb As SqlClient.SqlCommandBuilder
objCb = New SqlClient.SqlCommandBuilder(objDaValue)
If objDs.HasChanges(DataRowState.Modified) Then
objDaValue.Update(objDs, objTb)
Return True
Else
Return False
End If
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End If
End Function
(7)最后是一些修改后的重新绑定操作。具体要看是新增还是修改(一次只能执行一种操作),如果是新增就要求重新读一下数据,如果是修改,那就在AcceptChanges后,重新绑定DataView就可以了。
在WebForm下要用datagrid做批量修改,更新的原理是一样的,不过Datagrid里要使用模板列。
2.获取DataGrid里选中的行。
具体步骤:
(1)DataGrid绑定到DataView
(2)选中行
(3)获取行
Dim dm1 As BindingManagerBase
dm1 = Me.BindingContext(objDsTotal, "DataTabelName ")
Dim i, count As Integer
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
For i = 0 To dm1.Count - 1
If Me.DataGrid1.dgdGridShow.IsSelected(i) Then
![](/Images/OutliningIndicators/None.gif)
'do what you want to do with the select row
![](/Images/OutliningIndicators/None.gif)
count = count + 1
End If
Next
(4)最后可以根据count的值来判断是否做其他(如更新)操作,更新的原理和上面说的一样。