TableView は、表を表示するビューを表すクラスで 、ViewSchedule と PanelScheduleView の基本クラスです。1 つまたは複数のセクションからなる、関連付けられた TableData クラスがあります。ViewSchedule の場合、ヘッダとボディ セクションはそれぞれ 1 つしかありません。
TableSectionData クラスは、行と列に配列されたセルの連続したセットを表します。ViewSchedule の場合、TableSectionData のセル内容は ScheduleDefinition とパラメータから生成されます。また、ViewSchedule の場合、ヘッダ セクションには読み込みと書き込み権限がありますが、ボディ セクションは読み込み専用です。
表の実際のデータは TableData クラスに含まれます。TableData オブジェクトは TableView クラスから直接取得できませんが、両方の子クラスには、GetTableData()メソッドがあります。ViewSchedule の場合、このメソッドは TableData オブジェクトを返します。PanelScheduleView の場合は、GetTableData は、PanelScheduleData オブジェクトを返します。これは TableData 基本クラスから作成します。TableData クラスは、表の行、列、セルのスタイルを記述するデータの大部分を保持します。PanelScheduleData は、特にパネル集計表に関する追加メソッドを提供します。
表のデータはセクションに分かれています。TableData の行、列、セルで 作業するには、TableSectionData オブジェクトを取得する必要があります。TableData.GetSectionData()は、要求されたセクション データに対して整数で、または SectionType (Header または Body)を使用するかのいずれかで呼び出すことができます。
TableSectionData クラスを使用して、行または列、セルの書式設定を挿入または削除したり、セル タイプ(文字またはグラフィックス)またはセルのカテゴリの ID など、集計表のセクションを構成するセルの詳細を取得します。
次の例では、新しい行が集計表の見出しセクションに追加され、テキストが新しく作成されたセルに設定されています。ユーザ インタフェースで作成されたときのタイトルには、見出しセクションの既定の最初の行に注意してください。
|
コード領域: 行を挿入 |
public void CreateSubtitle(ViewSchedule schedule)
{
TableData colTableData = schedule.GetTableData();
TableSectionData tsd = colTableData.GetSectionData(SectionType.Header);
tsd.InsertRow(tsd.FirstRowNumber + 1);
tsd.SetCellText(tsd.FirstRowNumber + 1, tsd.FirstColumnNumber, "Schedule of column top and base levels with offsets");
}
|
また上記のコード サンプルでは、FirstColumnNumber および FirstRowNumber プロパティを使用します。一部のセクションでは、行または列の番号が 0 または 1 から始まる場合があります。これらのプロパティは、常にハードコード化された 0 または 1 の代わりに使用する必要があります。
次の例では、カスタム ヘッダ セクションを持つ、単一カテゴリの新しい集計表を作成します。
|
コード領域: ヘッダ セクションのカスタマイズ |
public static void CreateSingleCategoryScheduleWithSimpleHeaderSection(Document doc)
{
using (Transaction t = new Transaction(doc, "Create single-category with custom headers"))
{
// Build schedule
t.Start();
ViewSchedule vs = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_Windows));
AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.WINDOW_HEIGHT));
AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.WINDOW_WIDTH));
AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.ALL_MODEL_MARK));
AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.ALL_MODEL_COST));
doc.Regenerate();
// Get header section
TableSectionData data = vs.GetTableData().GetSectionData(SectionType.Header);
int rowNumber = data.LastRowNumber;
int columnNumber = data.LastColumnNumber;
// Get the overall width of the table so that the new columns can be resized properly
double tableWidth = data.GetColumnWidth(columnNumber);
data.InsertColumn(columnNumber);
data.InsertColumn(columnNumber);
// Refresh data to be sure that schedule is ready for text insertion
vs.RefreshData();
//Set text to the first header cell
data.SetCellText(rowNumber, data.FirstColumnNumber, "Special Window Schedule Text");
// Set width of first column
data.SetColumnWidth(data.FirstColumnNumber, tableWidth / 3.0);
//Set a different parameter to the second cell - the project name
data.SetCellParamIdAndCategoryId(rowNumber, data.FirstRowNumber + 1, new ElementId(BuiltInParameter.PROJECT_NAME),
new ElementId(BuiltInCategory.OST_ProjectInformation));
data.SetColumnWidth(data.FirstColumnNumber + 1, tableWidth / 3.0);
//Set the third column as the schedule view name - use the special category for schedule parameters for this
data.SetCellParamIdAndCategoryId(rowNumber, data.LastColumnNumber, new ElementId(BuiltInParameter.VIEW_NAME),
new ElementId(BuiltInCategory.OST_ScheduleViewParamGroup));
data.SetColumnWidth(data.LastColumnNumber, tableWidth / 3.0);
t.Commit();
}
}
public static void AddRegularFieldToSchedule(ViewSchedule schedule, ElementId paramId)
{
ScheduleDefinition definition = schedule.Definition;
// Find a matching SchedulableField
SchedulableField schedulableField =
definition.GetSchedulableFields().FirstOrDefault<SchedulableField>(sf => sf.ParameterId == paramId);
if (schedulableField != null)
{
// Add the found field
definition.AddField(schedulableField);
}
}
|
行、列、または個別のセルのスタイルは、集計表用にカスタマイズすることができます。これには、セルのすべての 4 面の境界線のスタイルや、セルの色、文字の外観(色、フォント、文字サイズ)を設定する機能が含まれています。標準の集計表では、これは、表の見出しセクションでのみ行うことができます。
下の例では、ViewSchedule (見出しセクションの 2 番目の行と想定)のサブタイトルのフォントを太字に、フォント サイズを 10 に設定しています。
|
コード領域: セルの書式設定 |
public void FormatSubtitle(ViewSchedule colSchedule)
{
TableData colTableData = colSchedule.GetTableData();
TableSectionData tsd = colTableData.GetSectionData(SectionType.Header);
// Subtitle is second row, first column
if (tsd.AllowOverrideCellStyle(tsd.FirstRowNumber + 1, tsd.FirstColumnNumber))
{
TableCellStyle tcs = new TableCellStyle();
TableCellStyleOverrideOptions options = new TableCellStyleOverrideOptions();
options.FontSize = true;
options.Bold = true;
tcs.SetCellStyleOverrideOptions(options);
tcs.IsFontBold = true;
tcs.TextSize = 10;
tsd.SetCellStyle(tsd.FirstRowNumber + 1, tsd.FirstColumnNumber, tcs);
}
}
|