- '先定义变量获取表
- Dim tbl As SmGrid = Proj.CurrentSmGrid
- '如果不让删除,则直接退出
- If tbl.AllowDelete AndAlso tbl.Selection.IsValid Then
- tbl.StopRedraw()
- '获取当前表的当前选择区域
- Dim rng As CellRange = tbl.Selection
-
- Try
- '由于删除动作会影响tb.Selection.r2这样的值,所以必须先在循环之前将这个值赋值到变量中
- Dim intLast As Integer = tbl.Selection.r2
- Dim intFirst As Integer = tbl.Selection.r1
- '遍历选择区域的每一行,因为删除操作会影响DataRows集合,为了不让删除影响序列的指定关系,我们从最后一行往前面反过来遍历
- For i As Integer = intLast To intFirst
- '如果指定行有绑定数据并且当前行没有被锁定,则继续删除操作
- If tbl.Rows(i).GetRowData() IsNot Nothing AndAlso Not tbl.Rows(i).GetRowData().Locked Then
- '将指定行删除
- tbl.Rows(i).GetRowData().Delete()
- End If
- Next
- Catch ex As Exception
- UnhandledExceptionManager.ShowAndSaveLog(ex)
- Finally
- tbl.ResumeRedraw()
- End Try
- End If
复制代码
删除行一定要注意不要在删除的时候修改集 合。可以通过序号倒序引用的方式来删除。
参考第7小点
http://www.sanmugrid.com/help/in ... %94%A8%E8%A1%8C.htm
'先定义变量获取表
Dim tbl As SmGrid = Proj.CurrentSmGrid
'可以根据筛选条件批量删除数据
tbl.DataTableHelp.DeleteFor("ColName like '%江苏%'")
删除的要点是一定不要通过遍历集 合来删除,因为删除其中一个就会引起集 合的变化,遍历就会变得薛定谔。 |