关于IFeatureClass和IFeatureLayer中的Search的区别

来源:互联网 发布:工程测量软件下载 编辑:程序博客网 时间:2024/05/21 13:54
 近来做关于打开图层属性表时有个小发现,就是在遍历图层中的要素时要用的Search方法,但是IFeatureClass和IFeatureLayer中都有这个方法,到底用哪个呢?测试了下,如果用IFeatureClass中的Search方法,那么打开的是原始图层中所有元素的属性,那么即使我对一个图层进行了编辑,比如删除了这个图层中的某些要素,但是打开属性表时里面的数据内容还是原始图层的内容。因此,要想对更新后的图层进行属性表的浏览,就要用到IFeatureLayer.Search方法了。
现在贴出打开属性表的代码,以便更直观的展示给大家。
  Public Sub LoadDatatoView(ByVal pFeatureLayer As ILayer, ByVal dtGridView As DataGridView)
        Dim aa As IFeatureLayer = CType(pFeatureLayer, IFeatureLayer)
        Dim pFields As IFields = aa.FeatureClass.Fields
        Dim pDataTable As New DataTable
        Dim i As Int32
        For i = 0 To pFields.FieldCount - 1
            Dim fldName As String
            fldName = pFields.Field(i).AliasName
            pDataTable.Columns.Add(fldName)
        Next
        Dim pFeatureCursor As IFeatureCursor
        Dim pQueryFilter As IQueryFilter '查询过滤器
        pQueryFilter = New QueryFilter '创建一个新的查询过滤器
        pQueryFilter.WhereClause = ""
       pFeatureCursor = aa.Search(pQueryFilter, False)      
        Dim pFeature As IFeature
        pFeature = pFeatureCursor.NextFeature()
        While (Not pFeature Is Nothing)
            Dim j As Int32
            Dim fldValue As String
            Dim dr As DataRow = pDataTable.NewRow()
            For j = 0 To pFields.FieldCount - 1
                Dim fldName As String
                fldName = pFields.Field(j).AliasName

                If fldName = "Shape" Then
                    If pFeature.Shape.GeometryType = 1 Then
                        fldValue = "point"
                    ElseIf pFeature.Shape.GeometryType = 3 Then
                        fldValue = "polyline"
                    ElseIf pFeature.Shape.GeometryType = 4 Then
                        fldValue = "polygon"
                    Else
                        fldValue = "unknown type"
                    End If

                Else
                    fldValue = pFeature.Value(j).ToString()
                End If
                dr(j) = fldValue
            Next
            pDataTable.Rows.Add(dr)
            pFeature = pFeatureCursor.NextFeature()
        End While
        dtGridView.DataSource = pDataTable
    End Sub
其中的pfeatureCursor = aa.Search(pQueryFilter, False),这句话aa是IFeatureLayer,而不是IFeatureClass.
原创粉丝点击