Web Components Grid 列ピン固定
Web Components Grid の Ignite UI for Web Components 列のピン固定機能を使用すると、開発者は特定の列を希望の順序でロックできるため、ユーザーが IgcGridComponent
を水平方向にスクロールしている場合でも、常に可視性を確保できます。
列ピン固定用の統合 UI があり、Web Components Grid ツールバーからアクセスできます。さらに、開発者は、列のピン状態を変更するカスタム ユーザー インターフェイスを柔軟に構築できます。
Web Components Grid 列ピン固定の例
以下の例は、1 つまたは複数の列を IgcGridComponent
の左側または右側にピン固定する方法を示しています。
列ピン固定の API
列のピン固定は IgcColumnComponent
の pinned
プロパティによって制御されます。デフォルトでピン固定列は IgcGridComponent
の左側に固定して描画され、IgcGridComponent
本体のピン固定されていない列は水平スクロールされます。
<igc-grid id="grid1" width="700px" auto-generate="false">
<igc-column field="Name" pinned="true"></igc-column>
<igc-column field="AthleteNumber"></igc-column>
<igc-column field="TrackProgress"></igc-column>
<igc-paginator per-page="10">
</igc-paginator>
</igc-grid>
constructor() {
var grid = this.grid = document.getElementById('grid') as IgcGridComponent;
grid.data = this.data;
}
IgcGridComponent
の pinColumn
または unpinColumn
メソッドを使用してフィールド名によって列をピン固定またはピン固定解除できます。
this.grid.pinColumn('AthleteNumber');
this.grid.unpinColumn('Name');
両方のメソッドは操作に成功したかどうかを示すブール値を返します。よくある失敗の原因に列がすでにその状態になっていることがあります。
列をピン固定すると、一番右に配置されたピン固定列の右にピン固定されます。ピン固定列の順序を変更するには、ColumnPin
イベントでイベント引数の InsertAtIndex
プロパティを適切な位置インデックスに変更します。
<igc-grid id="dataGrid" auto-generate="true"></igc-grid>
constructor() {
var dataGrid = document.getElementById('dataGrid') as IgcGridComponent;
dataGrid.data = this.data;
dataGrid.addEventListener("columnPin", this.columnPinning);
}
public columnPinning(event) {
if (event.detail.column.field === 'Name') {
event.detail.insertAtIndex = 0;
}
}
ピン固定の位置
pinning
設定オプションを使用して、列のピン固定の位置を変更できます。列の位置を [Start] または [End] のいずれかに設定できます。
[End] に設定すると、列がピン固定されていない列の後に、グリッドの最後にレンダリングされます。ピン固定されていない列は水平にスクロールできますが、ピン固定された列は右側に固定されます。
<igc-grid id="dataGrid" auto-generate="true"></igc-grid>
var grid = document.getElementById('dataGrid') as IgcGridComponent;
grid.pinning = { columns: ColumnPinningPosition.End };
デモ
カスタム列ピン固定 UI
カスタム UI を定義し、関連する API を介して列のピン状態を変更できます。
ツールバーの代わりに、エンドユーザーが特定の列のピンの状態を変更するためにクリックできる列ヘッダーにピンアイコンを定義するとします。
これは、カスタムアイコンを使用して列のヘッダーテンプレートを作成することで実行できます。
<igc-grid id="grid1" width="100%" height="500px" auto-generate="false">
<igc-column id="Name" field="Name" data-type="String" width="250px"></igc-column>
<igc-column id="Title" field="Title" data-type="String" width="300px"></igc-column>
<igc-column id="ID" field="ID" data-type="Number" width="200px"></igc-column>
<igc-column id="HireDate" field="HireDate" header="Hire Date" data-type="Date" width="200px"></igc-column>
<igc-column id="Age" field="Age" data-type="Number" width="200px"></igc-column>
<igc-column id="Address" field="Address" data-type="String" width="200px"></igc-column>
<igc-column id="City" field="City" data-type="String" width="200px"></igc-column>
<igc-column id="Country" field="Country" data-type="String" width="200px"></igc-column>
<igc-column id="Fax" field="Fax" data-type="String" width="200px"></igc-column>
<igc-column id="PostalCode" field="PostalCode" header="Postal Code" data-type="String" width="200px"></igc-column>
<igc-column id="Phone" field="Phone" data-type="String" width="200px"></igc-column>
</igc-grid>
constructor() {
var grid1 = document.getElementById('grid1') as IgcGridComponent;
var Name = document.getElementById('Name') as IgcColumnComponent;
var Title = document.getElementById('Title') as IgcColumnComponent;
var ID = document.getElementById('ID') as IgcColumnComponent;
var HireDate = document.getElementById('HireDate') as IgcColumnComponent;
var Age = document.getElementById('Age') as IgcColumnComponent;
var Address = document.getElementById('Address') as IgcColumnComponent;
var City = document.getElementById('City') as IgcColumnComponent;
var Country = document.getElementById('Country') as IgcColumnComponent;
var Fax = document.getElementById('Fax') as IgcColumnComponent;
var PostalCode = document.getElementById('PostalCode') as IgcColumnComponent;
var Phone = document.getElementById('Phone') as IgcColumnComponent;
grid.data = this.data;
Name.headerTemplate = this.pinHeaderTemplate;
Title.headerTemplate = this.pinHeaderTemplate;
ID.headerTemplate = this.pinHeaderTemplate;
HireDate.headerTemplate = this.pinHeaderTemplate;
Age.headerTemplate = this.pinHeaderTemplate;
Address.headerTemplate = this.pinHeaderTemplate;
City.headerTemplate = this.pinHeaderTemplate;
Country.headerTemplate = this.pinHeaderTemplate;
Fax.headerTemplate = this.pinHeaderTemplate;
PostalCode.headerTemplate = this.pinHeaderTemplate;
Phone.headerTemplate = this.pinHeaderTemplate;
}
public pinHeaderTemplate = (ctx: IgcCellTemplateContext) => {
return html`
<div class="title-inner">
<span style="float:left">${ctx.cell.column.header}</span>
<igc-icon class="pin-icon" fontSet="fas" name="fa-thumbtack" @click="${() => toggleColumn(ctx.cell.column)}"></igx-icon>
</div>
`;
}
カスタムアイコンをクリックすると、関連する列のピン状態は、列の API メソッドを使用して変更できます。
public toggleColumn(col: IgcColumnComponent) {
col.pinned ? col.unpin() : col.pin();
}
デモ
ピン固定の制限
- 列幅をパーセンテージ (%) で設定した場合にピン固定列があると
IgcGridComponent
本体およびヘッダー コンテンツが正しく配置されません。列のピン固定を正しく設定するには、列幅をピクセル (px) に設定するか、IgcGridComponent
によって自動的に割り当てる必要があります。
スタイル設定
定義済みのテーマに加えて、利用可能な CSS プロパティのいくつかを設定することで、グリッドをさらにカスタマイズできます。
一部の色を変更したい場合は、最初にグリッドの ID
を設定する必要があります。
<igc-grid id="grid"></igc-grid>
Then set the related CSS properties to this class:
#grid {
--ig-grid-pinned-border-width: 5px;
--ig-grid-pinned-border-color: #FFCD0F;
--ig-grid-pinned-border-style: double;
--ig-grid-cell-active-border-color: #FFCD0F;
}
デモ
API リファレンス
その他のリソース
コミュニティに参加して新しいアイデアをご提案ください。