Sort Table Example (C#)
This example shows how to sort bill of materials, hole, general, and weldment cut list tables.
//---------------------------------------------------------------------------
// Preconditions:
// 1. Open a drawing with one of the following tables:
// * General
// * Hole chart
// * Weldment cut list
// * Bill of materials parts-only table that
// contains four columns: Item No, Part Number, Description, and Qty.
// 2. Click the move-table icon in the upper-left corner
// of the table in the view.
// The PropertyManager opens on the table.
// 3. If the table is a BOM table, ensure that
// PropertyManager > Item Numbers > Follow assembly order is not
selected.
//
// Postconditions:
// 1. Inspect the Immediate Window.
// 2. The tables are sorted as follows:
// * If it is a BOM table:
// * Primary sort is on column three (Qty).
// * Secondary sort is on column one (Part Number).
// * There is no tertiary sort.
// * All column sorts are ascending.
// * Rows are sorted into categories in the following order:
// 1. Parts
// 2. User-defined
// * If it is a general table, the sort is descending on the first
column.
// * If it is a hole table, the sort is ascending on the
Tag column.
// * If it is a weldment cut list table, the sort is descending on
// the third column.
//
--------------------------------------------------------------------------
using
SolidWorks.Interop.sldworks;
using
SolidWorks.Interop.swconst;
using
System;
using
System.Diagnostics;
namespace
Macro1.csproj
{
public
partial
class
SolidWorksMacro
{
IModelDoc2
swModDoc = null;
ITableAnnotation
swTable = null;
public
void Main()
{
GetSelTable();
SortSelTable();
}
public
void
GetSelTable()
{
swModDoc = (IModelDoc2)swApp.ActiveDoc;
ISelectionMgr
swSM = null;
swSM = (ISelectionMgr)swModDoc.SelectionManager;
swTable = (ITableAnnotation)swSM.GetSelectedObject6(1,
-1);
swModDoc.ClearSelection2(true);
}
public
void
SortSelTable()
{
if
(swTable != null)
{
swTableAnnotationType_e
tableType = (swTableAnnotationType_e)swTable.Type;
bool
status = false;
switch
(tableType)
{
case
swTableAnnotationType_e.swTableAnnotation_General:
status = SortGeneralTable();
break;
case
swTableAnnotationType_e.swTableAnnotation_HoleChart:
status = SortHoleChartTable();
break;
case
swTableAnnotationType_e.swTableAnnotation_WeldmentCutList:
status = SortWeldmentCutlistTable();
break;
case
swTableAnnotationType_e.swTableAnnotation_BillOfMaterials:
status = SortBOMTable();
break;
default:
Debug.Print("Unspecified
table type selected.");
break;
}
}
}
public
bool
SortGeneralTable()
{
Debug.Print("Table
type selected : swTableAnnotation_General");
IGeneralTableAnnotation
swSpecTable = (IGeneralTableAnnotation)swTable;
bool
status = swSpecTable.Sort(0, false);//sort
descending
return
status;
}
public
bool
SortHoleChartTable()
{
Debug.Print("Table
type selected : swTableAnnotation_HoleChart");
IHoleTableAnnotation
swSpecTable = (IHoleTableAnnotation)swTable;
bool
status = swSpecTable.Sort(0, true
);//sort ascending
return
status;
}
public
bool
SortWeldmentCutlistTable()
{
Debug.Print("Table
type selected : swTableAnnotation_WeldmentCutList");
IWeldmentCutListAnnotation
swSpecTable = (IWeldmentCutListAnnotation)swTable;
bool
status = swSpecTable.Sort(2, false);//sort
descending
return
status;
}
public
bool
SortBOMTable()
{
Debug.Print("Table
type selected : swTableAnnotation_BillOfMaterials");
IBomTableAnnotation
swSpecTable = (IBomTableAnnotation)swTable;
BomTableSortData
swSortData = swSpecTable.GetBomTableSortData();
// Specify the sort order
indexes for three columns in the table
//
Specify the direction of sort for the three sort order indexes
swSortData.set_ColumnIndex(0,
3); // primary sort
swSortData.set_Ascending(0,
true);
// sort ascending
swSortData.set_ColumnIndex(1,
1); // secondary sort
swSortData.set_Ascending(1,
true);
// sort ascending
swSortData.set_ColumnIndex(2,
-1); // no tertiary sort
int
pos1 = swSortData.get_ColumnIndex(0);
Debug.Print("Column
for primary sort is " + pos1);
// should be 3
int
pos2 = swSortData.get_ColumnIndex(1);
Debug.Print("Column
for secondary sort is " + pos2);
// should be 1
int
pos3 = swSortData.get_ColumnIndex(2);
Debug.Print("Column
for tertiary sort is " + pos3);
// should be -1
int[]
listGrpArray = null;
object
grpArray = null;
grpArray = listGrpArray;
bool
bWantGrp = true;
if(bWantGrp)
{
// Sort rows into part and
user-defined categories
listGrpArray =
new
int[3];
listGrpArray[0] = (int)swBomTableSortItemGroup_e.swBomTableSortItemGroup_None;
listGrpArray[1] = (int)swBomTableSortItemGroup_e.swBomTableSortItemGroup_Parts;
listGrpArray[2] = (int)swBomTableSortItemGroup_e.swBomTableSortItemGroup_Other;
grpArray = listGrpArray;
}
swSortData.ItemGroups = grpArray;
// After sorting, do not
re-number the items
swSortData.DoNotChangeItemNumber
= true;
bool
status = swSpecTable.Sort(swSortData);
Debug.Print("BOM
table sorted: " + status);
return
status;
}
public
SldWorks
swApp;
}
}