二个解决方法,一是循环改为DataTable的DataRow,二是窗口表的sel ect语句加上_SortKey,如sel ect [_Identify],[_SortKey],第一列,第二列 from {表A} where 1=2
窗口表没有_SortKey,table是属于排序表,默认是按照_SortKey排序的,如果没有_SortKey则按照_Identify排序,保存时由于_Identify会更新为数据库实际的最大值,导致保存后的这行跑到了table表的最后,因此for each 的顺序就乱了,所以双数行就保存不到。而 DataTable顺序不会改变,因此不会有这个问题。测试中去掉这句代码CurrentTable.DataTable.RemoveFor("")就可以看到效果了
Dim tbl As Table = e.Form.Controls("Table3").Table
Dim r As DataRow
For Each r In tbl.DataTable.DataRows
Dim isnull As Boolean = True
For Each c As Col In tbl.Cols
If r.IsNull(c.name) = False Then
isNull = False
Exit For
End If
Next
If isnull = False Then
r.Save
End If
Next
'CurrentTable.DataTable.Save
CurrentTable.DataTable.RemoveFor("")