Winform下DataGrid使用技巧总结

  1. 在DataGrid程序中批量修改数据

    要达到的效果是使DataGrid里的数据修改可以像Excel一样方便易用。
     具体步骤如下:
      
      (1)DataGrid绑定到DataView
      (2)使DataGrid处于可以编辑状态下,DataView处于允许编辑,新增状态
      (3)编辑数据
      (4)编辑完毕后,移开焦点,这步很关键,如果不移开焦点,当前修改的哪个单元格   就被认为数据没有修改,具体的操作如下:
        

None.gif   Dim  a  As   Integer
None.gif                        a 
=   Me .DataGrid3.CurrentRowIndex  +   1
None.gif                        
Me .DataGrid3.CurrentCell  =   New  DataGridCell(a,  10 )

其中的10 要根据读进来的数据进行改变
      (5)检查DataGrid的数据是否被修改,如果有就执行第 (6)步,否则到此结束。
           检查的操作如下:
          

None.gif   If  objDs.HasChanges(DataRowState.Modified)  =   False   Then
None.gif            
MsgBox ( " 沒有數據被修改 " , MsgBoxStyle.OKOnly,  " 數據保存 " )
None.gif
Exit Sub
None.gif        
End   If

      (6)利用SqlDataAdapter的Update来更新数据
              具体操作如下
         
ExpandedBlockStart.gif ContractedBlock.gif Public   Function SaveData() 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的表名
InBlock.gif
        If isAdd = True Then
InBlock.gif 
Try
InBlock.gif                objDaValue 
= New SqlClient.SqlDataAdapter(strSql, strConn)
InBlock.gif               
Dim objCb As SqlClient.SqlCommandBuilder
InBlock.gif               objCb 
= New SqlClient.SqlCommandBuilder(objDaValue)
InBlock.gif               
If objDs.HasChanges(DataRowState.Added) Then
InBlock.gif                   objDaValue.Update(objDs, objTb)
InBlock.gif               
Return True
InBlock.gif              
Else
InBlock.gif               
Return False
InBlock.gif              
End If
InBlock.gif            
Catch
InBlock.gif             
Return False
InBlock.gif            
End Try
InBlock.gif                   
Else
InBlock.gif            objDaValue.ContinueUpdateOnError 
= True
InBlock.gif            
Try
InBlock.gif                objDaValue 
= New SqlClient.SqlDataAdapter(strSql, ws.GetConnStr)
InBlock.gif                
Dim objCb As SqlClient.SqlCommandBuilder
InBlock.gif                objCb 
= New SqlClient.SqlCommandBuilder(objDaValue)
InBlock.gif                
If objDs.HasChanges(DataRowState.Modified) Then
InBlock.gif                    objDaValue.Update(objDs, objTb)
InBlock.gif                    
Return True
InBlock.gif                
Else
InBlock.gif                    
Return False
InBlock.gif                
End If
InBlock.gif            
Catch ex As Exception
InBlock.gif                
MsgBox(ex.Message)
InBlock.gif                
Return False
InBlock.gif            
End Try
InBlock.gif        
End If
ExpandedBlockEnd.gif    
End Function


           (7)最后是一些修改后的重新绑定操作。具体要看是新增还是修改(一次只能执行一种操作),如果是新增就要求重新读一下数据,如果是修改,那就在AcceptChanges后,重新绑定DataView就可以了。

            在WebForm下要用datagrid做批量修改,更新的原理是一样的,不过Datagrid里要使用模板列。

            2.获取DataGrid里选中的行。
             具体步骤:
              (1)DataGrid绑定到DataView
              (2)选中行
              (3)获取行
               

None.gif Dim  dm1  As  BindingManagerBase
None.gif        dm1 
=   Me .BindingContext(objDsTotal,  " DataTabelName  " )
None.gif        
Dim  i, count  As   Integer
None.gif
None.gif
None.gif        
For  i  =   0   To  dm1.Count  -   1
None.gif            
If   Me .DataGrid1.dgdGridShow.IsSelected(i)  Then
None.gif
None.gif          
' do what you want to do with the select row
None.gif

None.gif                count 
=  count  +   1
None.gif            
End   If
None.gif        
Next

              (4)最后可以根据count的值来判断是否做其他(如更新)操作,更新的原理和上面说的一样。

转载于:https://www.cnblogs.com/weisai/archive/2006/01/11/315140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值