您的位置:首页 > Web前端

关于IFeatureClass和IFeatureLayer中的Search的区别

2011-11-22 13:59 447 查看
近来做关于打开图层属性表时有个小发现,就是在遍历图层中的要素时要用的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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: