|
使用ITableSort可以对表进行排序,但是排序後如果用Row.Store()更新记录会非常慢。比较好的办法是先遍历排序表获得一个HashTable,然后从表通过Update方法获得一个可更新的ICursor,然后使用UpdateRow和Flush来更新。速度快很多。片段代码如下:
'提高效率的办法,不用.Store,首先获得一个OID,和顺序编号的HashTable Dim IDHash As New Hashtable Do While Not pRow Is Nothing ' Debug.Print(pRow.Value(XIndex) & " , " & pRow.Value(YIndex)) IDHash.Add(pRow.OID, ID) ID += 1 ' pRow.Store() pRow = pCursor.NextRow Loop
'然后更新!! Dim UpdateCursor As ICursor = pTableSort.Table.Update(Nothing, False) pRow = UpdateCursor.NextRow Do Until pRow Is Nothing If XOffset <> 0 Then pRow.Value(XIndex) = pRow.Value(XIndex) + XOffset If YOffset <> 0 Then pRow.Value(YIndex) = pRow.Value(YIndex) + YOffset MaxCol = Math.Max(MaxCol, pRow.Value(XIndex)) MaxRow = Math.Max(MaxRow, pRow.Value(YIndex)) pRow.Value(WASPIDIndex) = IDHash(pRow.OID) UpdateCursor.UpdateRow(pRow) pRow = UpdateCursor.NextRow Loop UpdateCursor.Flush()
|