关于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.
现在贴出打开属性表的代码,以便更直观的展示给大家。
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.
相关文章推荐
- Search属性 关于 Featureclass 和 Featurelayer
- 关于AE中IFeatureWorkspace接口的CreateFeatureClass方法
- FeatureClass 与DataSet的区别,与Layer的关系
- layer,featureclass,etc(OGR,原来是讲OGR的,不是ESRI的产品的)
- AE中如何由IFeature 如何获取所对应的FeatureClass
- 关于RandomizedSearchCV 和GridSearchCV(区别:参数个数的选择方式)
- 转@关于c++模板template中的typename 和class的区别
- IFeatureClass.Search中的 Recycling 参数 - 浅谈.
- 关于.getClass()和.class的区别
- ios oc 类之间相互依赖 关于import和@class的区别
- 关于R中的mode()和class()的区别
- [转] AE中如何由IFeature 如何获取所对应的FeatureClass
- 关于C++中模板中的typename和class的区别比较
- 关于C_C++中struct与class的区别
- 关于.getClass()和.class的区别
- Java学习笔记:关于.getClass()和.class的区别
- HTML、CSS里面关于 id、class、name 属性的区别和用法
- 关于struct和class的区别
- c++中关于类(class)和结构体(struct)的区别个人总结
- FeatureClass.Search(IQuery Filter,bool Recycling)参数说明