2024/10/11

DXL Step-by-Step:#40)表のスタイル - タブ形式

ノーツの表には特殊な設定があって、これを利用するとタブ形式やアコーディオン形式の UI が作成できます。表のプロパティでは[表の行]タブの設定になります。今回はこの設定を DXL で操作してみましょう。

タブ形式の表では、表の行数分のタブが表示され、タブをクリックすることでその行を表示します。要はタブのクリックで表示する行を切り替える機能ということですね。ですので、プロパティでは『1 行のみ表示』を選択することになります。

そして、スタイルは『行の表示方法』で指定します。『タブボタンで行を選択』でタブ形式、『表題で行を選択』でアコーディオン形式となります。タブの表題は『タブラベルと表題』にしています。これは、行ごとに設定することになります。


表のスタイルの設定

DXL で表のスタイルを設定するには、table ノードの rowdisplay 属性を設定します。これまでこの属性を指定していなかったので、通常の表として表示されていたということですね。

属性 設定値 補足
rowdisplay (なし) 通常の表
'tabs' タブボタンで行を選択(タブ形式)
'captions' 表題で行を選択(アコーディオン形式)


タブの表題の設定

タブの表題は行ごとに指定することから tablerow ノードの属性として設定します。属性名は tablabel です。


サンプルプログラム

#32)表の作成と行・列の間隔 では、3 行 2 列の単純な表を作成するサンプルプログラムを紹介しました。今回はこれを改造します。

まず、表を作成する関数 xSetDXL_table を修正します。赤字が修正箇所です。

Function xSetDXL_table(_
            vddn As NotesDOMDocumentNode, _
            vdenRT As NotesDOMElementNode, _
            vvTabName As Variant, ByVal viCols As Integer _
            ) As NotesDOMElementNode
   Dim denTbl As NotesDOMElementNode
   Dim denRow As NotesDOMElementNode
   Dim den As NotesDOMElementNode
   Dim iCol As Integer
   Dim iRow As Integer

   '表の作成
   Set den = vddn.CreateElementNode("table")
   Set denTbl = vdenRT.AppendChild(den)
   'タブ形式の表
   Call denTbl.SetAttribute("rowdisplay", "tabs")

   '列定義の作成
   For iCol = 1 To viCols
      Set den = vddn.CreateElementNode("tablecolumn")
      Call denTbl.AppendChild(den)
   Next

   '行の作成
   For iRow = 0 To UBound(vvTabName)
      Set den = vddn.CreateElementNode("tablerow")
      Set denRow = denTbl.AppendChild(den)
      'タブ名称
      Call denRow.SetAttribute("tablabel", vvTabName(iRow))

      'セルの作成
      For iCol = 1 To viCols
         Set den = vddn.CreateElementNode("tablecell")
         Call denRow.AppendChild(den)
      Next
   Next

   Set xSetDXL_table = denTbl
End Function

まず、引数では行数を指定するのではなく、タブの表題を文字列型の配列で渡す仕様に変えています。これに伴い、行を作成するループの指定が配列の要素数分に変更されています。

そして、本題のタブの設定は、table ノードに rowdisplay 属性、tablerow ノードに対して tablabel 属性をセットしている 2 か所となります。


関数の修正に伴い、呼び出しもとを次のように修正します。

Function xSetDXL(vdprs As NotesDOMParser)
         ・・・
   '表前の段落追加
   Call xSetDXL_par(ddn, denRT)

   'タブ表の追加
   Dim asTabName(1)
   asTabName(0) = "Sample Tab 1"
   asTabName(1) = "タブ2"
   Set denTbl = xSetDXL_table(ddn, denRT, asTabName, 1)


   '間隔の設定
         ・・・
End Function

タブ名称を asTabName 配列にセットして、関数をコールしているだけです。


実行結果

修正したプログラムを実行すると、次のようにタブが 2 つの表が作成されます。

また、rowdisplay 属性を captions に変更すると次のようにアコーディオン形式となります。


前回 DXL Step-by-Step


0 件のコメント:

コメントを投稿