关于IFeatureClass和IFeatureLayer中的Search的区别

本文探讨了在遍历图层要素时如何正确选择IFeatureClass与IFeatureLayer中的Search方法,以确保显示已更新的图层数据。通过具体代码示例展示了如何使用IFeatureLayer的Search方法来实现这一目标。
 近来做关于打开图层属性表时有个小发现,就是在遍历图层中的要素时要用的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.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值