如何纪录排序(ITableSort)

本例要实现的是如何将一个FeatureClass中的数据按某字段的值进行排序。

l   要点

定义ITableSort接口对象,并用TableSort类实现之,设置排序所用到的字段、排序方式(升序或降序)以及排序的数据源,然后使用ITableSort.Sort方法进行排序。

主要用到ITableSort接口。

l   程序说明

函数OpenFeatureClass获得当前激活的Map中第一层的IFeatureClass接口对象。

函数SortFeatures按照pFeatureClass的第五个字段值对pFeatureClass的数据进行从小到大排序,并返回一个排好序的ICursor接口对象。

l   代码

Private Function SortFeatures(pFeatureClass As IFeatureClass) As ICursor

    Dim pTableSort          As ITableSort

    Dim pFields             As IFields

    Dim pField              As IField

    Dim pQueryFilter        As IQueryFilter

    Dim pCursor             As ICursor

On Error GoTo ErrorHandler:

    Set SortFeatures = Nothing

    Set pFields = pFeatureClass.Fields

    Set pField = pFields.Field(5)

    Set pTableSort = New esriCore.TableSort

    Set pQueryFilter = New QueryFilter

    Set pCursor = Nothing   

    With pTableSort

        .Fields = pField.Name

        .Ascending(pField.Name) = True

        .CaseSensitive(pField.Name) = True

        Set .QueryFilter = pQueryFilter

        Set .Table = pFeatureClass

    End With

    pTableSort.Sort Nothing

    Set pCursor = pTableSort.Rows

    Set SortFeatures = pCursor

    If (pCursor Is Nothing) Then

        MsgBox ("未排序")

    Else

        MsgBox ("排序完成")

    End If

    Exit Function

ErrorHandler:

    MsgBox Err.Description

End Function

Private Function OpenFeatureClass() As IFeatureClass

    Dim pMxDocument             As IMxDocument

    Dim pMap                    As IMap

    Dim pFeatureLayer           As IFeatureLayer

    Dim pFeatureClass           As IFeatureClass

On Error GoTo ErrorHandler:

    Set OpenFeatureClass = Nothing

    Set pMxDocument = ThisDocument

    Set pMap = pMxDocument.FocusMap

    If (pMap.LayerCount = 0) Then

        MsgBox ("缺少数据")

        Exit Function

    End If

    Set pFeatureLayer = pMap.Layer(0)

    Set pFeatureClass = pFeatureLayer.FeatureClass

    Set OpenFeatureClass = pFeatureClass

    Exit Function

ErrorHandler:

    MsgBox Err.Description

End Function

Private Sub UIButtonControl1_Click()

On Error GoTo ErrorHandler:

    Dim pFeatureClass           As IFeatureClass

    Set pFeatureClass = OpenFeatureClass()

    SortFeatures pFeatureClass

    Exit Sub

ErrorHandler:

    MsgBox Err.Description

End Sub

Private Sub UIButtonControl1_Click()

On Error GoTo ErrorHandler:

    Dim pFeatureClass           As IFeatureClass

    Set pFeatureClass = OpenFeatureClass()

    SortFeatures pFeatureClass

    Exit Sub

ErrorHandler:

    MsgBox Err.Description

End Sub

posted on 2006-09-07 13:17  greatbird  阅读(1484)  评论(0)    收藏  举报

导航