1. 在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来更新数据
              具体操作如下
         
Public Function SaveData(ByVal strSql As StringByVal isAdd As BooleanByVal objDs As DataSet, ByVal objTb As StringAs 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


        
For i = 0 To dm1.Count - 1
            
If Me.DataGrid1.dgdGridShow.IsSelected(i) Then

          
'do what you want to do with the select row

                count 
= count + 1
            
End If
        
Next

              (4)最后可以根据count的值来判断是否做其他(如更新)操作,更新的原理和上面说的一样。
posted on 2006-01-11 11:31  与雪共舞  阅读(3730)  评论(2编辑  收藏  举报