欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏ArcGIS应用与开发AO开发 → 正文
TableSort对象的使用
07-12-05 00:00:00 作者:浩淼的天空 出处:浩淼的天空
ArcObjects虽然支持使用SQL语句来对数据进行查询,但是这种支持的程度很低。如果我们想依据某个属性来排列查找出来的数据,在普通关系数据库中仅仅是在Select语句后面加上“Order by ***”,但是AO对这个操作不能直接支持。
AO的帮助中说会它们在下个版本中提供这个基本的功能。在它们还不能支持前,我们可以使用TableSort对象来完成这个任务。TableSort对象是表的排序对象,它可以将查找的结果按照某个字段进行排序,然后返回所有符合条件的要素的游标。
ITableSort接口可以让我们设置TableSort对象的属性并且执行排序。对一个TableSort而言,Table和Fields属性是必须被设置的,其它的属性都是可以选择的。除了使用表外,选择集可以作为一个需要排序的数据源。
Fields是一个用于排序的字段列表,它可以有多个字段输入,当使用ITableSort::Sort方法排序的时候,它会首先根据第一个字段进行排序,然后根据第二个进行排序,依此类推。
我们也可以使用Cursor属性用于排序,当我们设置Cursor时,必须使用Table属性来设置这个cursor指向的表对象。
除此以外,我们还可以设置Ascending、CaseSensitive属性等,前者用于确定使用那个字段升序排列,后者确定使用使用大小写敏感设置。
下面的代码段是一个排序的例子:
Public Sub FeatSort()
Dim pFact As IWorkspaceFactory
pFact = New ShapefileWorkspaceFactory
Dim pWorkspace As IFeatureWorkspace
pWorkspace = pFact.OpenFromFile("E:\arcgisdata\ESRIDATA\USA\", 0)
Dim pFeatClass As IFeatureClass
pFeatClass = pWorkspace.OpenFeatureClass("states")

'产生一个临时的工作空间
Dim pScratchWorkspace As IWorkspace
Dim pScratchWorkspaceFactory As IScratchWorkspaceFactory
pScratchWorkspaceFactory = New ScratchWorkspaceFactory
pScratchWorkspace = pScratchWorkspaceFactory.DefaultScratchWorkspace

'新建一个过滤器
Dim pQFilt As IQueryFilter
pQFilt = New QueryFilter
pQFilt.WhereClause = "Area > 77000"

'获得选择集
Dim pSelectionSet As ISelectionSet
pSelectionSet = pFeatClass.Select(Nothing, esriSelectionType.esriSelectionTypeIDSet, esriSelectionOption.esriSelectionOptionNormal, pScratchWorkspace)

'新建一个TableSort对象
Dim pTableSort As ITableSort
pTableSort = New TableSort
With pTableSort
'进行排序的字段
.Fields = "Area,state_name"
'Area字段不是升序排列
.Ascending ("Area") = False
.Ascending ("State_name") = True
'设置排列的数据源
.SelectionSet = pSelectionSet
End With

pTableSort.Sort (Nothing)

Dim pCursor As IFeatureCursor
pCursor = pTableSort.Rows

Dim pFeat As IFeature
pFeat = pCursor.NextFeature
Dim i As Integer
Do While Not pFeat Is Nothing
MessageBox.Show(pFeat.Value(3) & ":" & pFeat.Value(2))
pFeat = pCursor.NextFeature
Loop
End Sub
上面的例子是使用一个从要素类中提取出来的要素选择集作为数据源,对这个要素选择集进行排序的操作。其中要素的第3个字段为“State_Name”,第二个字段为“Area”。
另外读者还注意一下IFeatureClass::Select方法和IFeatureSelection::Select方法的区别。

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号