FAQ
ArcObjects で検索結果をソートして取得する方法

ナレッジ番号:5307 | 登録日:2023/07/26 | 更新日:2024/10/09

概要

検索結果をソートして取得するには、

  • ITableSort::QueryFilter で検索条件式を
  • ITableSort::Table でソート対象のテーブルを
  • ITableSort::Fields でソートで使用するフィールドを
  • ITableSort.Ascending でソート順を指定し、
  • ITableSort::Sort でソートを実行します。

検索結果はITableSort::Rows で取得したカーソルに保存されています。

サンプルコード

string fname = "P_NUM";
TableSort pTableSort = new TableSortClass();
//QueryFilter の設定は省略 しますが、必要あらば、関連情報 の FAQ を参照してください
SpatialFilter pQueryFilter = new SpatialFilterClass();

//マップの最上位に追加されたフィーチャ レイヤーを取得
IFeatureLayer pflayer = (IFeatureLayer)ArcMap.Document.FocusMap.get_Layer(0);
//Table オブジェクトを取得
ITable pTable = (ITable)pflayer;

//ソートの設定を行う
pTableSort.Fields = fname;
pTableSort.set_Ascending(fname, true);
pTableSort.Table = pTable;

//フィールドのインデックスから Field オブジェクトを取得
System.Int32 findex;
findex = pTable.Fields.FindField(fname);

//ソートを実行
pTableSort.Sort(null);
//ソート結果をカーソルに登録
ICursor pCursor = pTableSort.Rows;
IRow pRow = pCursor.NextRow();

while (pRow != null)
{
    //Row オブジェクトの最初のフィールド値と、ソートに使用したフィールド値を表示
    System.Diagnostics.Debug.Print(pRow.get_Value(0).ToString() + " , " + pRow.get_Value(findex));
    pRow = pCursor.NextRow();
}
Dim fname As String = "P_NUM"
Dim pTableSort As ITableSort = New TableSortClass()
'QueryFilter の設定は省略 しますが、必要あらば、関連情報 の FAQ を参照してください
Dim pQueryFilter As ISpatialFilter = New SpatialFilterClass()

'マップの最上位に追加されたフィーチャ レイヤーを取得
Dim pflayer As IFeatureLayer = CType(My.ArcMap.Document.FocusMap.Layer(0), IFeatureLayer)
'Table オブジェクトを取得
Dim ptable As ITable = CType(pflayer, ITable)

'ソートの設定を行う
pTableSort.Fields = fname
pTableSort.Ascending(fname) = True
pTableSort.QueryFilter = pQueryFilter
pTableSort.Table = ptable

'フィールドのインデックスから Field オブジェクトを取得
Dim findex As System.Int32
findex = ptable.Fields.FindField(fname)

'ソートを実行
pTableSort.Sort(Nothing)

'ソート結果をカーソルに登録
Dim pCursor As ICursor = pTableSort.Rows
Dim pRow As IRow = pCursor.NextRow()

Do While Not (pRow Is Nothing)
    'Row オブジェクトの最初のフィールド値と、ソートに使用したフィールド値を表示
    System.Diagnostics.Debug.Print(pRow.Value(0).ToString() + " , " + pRow.Value(findex).ToString())
    pRow = pCursor.NextRow()
Loop

参考情報

Sorting tables

メタデータ

機能

種類

製品