React Grid の行操作
React Grid の Ignite UI for React 行操作機能を使用すると、開発者は IgrActionStrip
を使用し、行/セル コンポーネントと行のピン固定に CRUD を利用できます。これらの操作 (編集とピン固定) には、IgrGrid
の特定の行に適用できる事前定義された UI コントロールがいくつかあります。
使用方法
事前定義された操作 (actions) UI コンポーネントは次のとおりです:
これらは IgrGrid
内に追加され、デフォルトのインタラクションを提供する IgrActionStrip
プを持つために必要です。
<IgrGrid id="grid" rowEditable="true" primaryKey="ID">
<IgrColumn field="field">
</IgrColumn>
<IgrActionStrip name="actionStrip">
<IgrGridPinningActions></IgrGridPinningActions>
<IgrGridEditingActions></IgrGridEditingActions>
</IgrActionStrip>
</IgrGrid>
tsx
ActionStripComponent が IgrGrid の子コンポーネントの場合、行をホバーすると UI が自動的に表示されます。
カスタムの実装
これらのコンポーネントは、カスタマイズのための柔軟性を提供するテンプレートを公開します。たとえば、delete、edit などの行アクションがある Gmail シナリオで IgrActionStrip
を使用する場合、アイコンでボタン コンポーネントを作成します。そして、クリック イベントを追加し、IgrActionStrip
に挿入します。
<IgrGrid>
<IgrActionStrip name="actionStrip">
<IgrGridPinningActions></IgrGridPinningActions>
<IgrGridEditingActions editRow="true" deleteRow="true"></IgrGridEditingActions>
</IgrActionStrip>
</IgrGrid>
tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import { IgrPropertyEditorPanelModule } from "@infragistics/igniteui-react-layouts";
import { IgrGridModule } from "@infragistics/igniteui-react-grids";
import { IgrGrid, IgrPinningConfig, RowPinningPosition, IgrActionStrip, IgrGridPinningActions, IgrGridEditingActions, IgrColumn } from "@infragistics/igniteui-react-grids";
import { ComponentRenderer, PropertyEditorPanelDescriptionModule, WebGridDescriptionModule } from "@infragistics/igniteui-react-core";
import NwindData from './NwindData.json';
import "@infragistics/igniteui-react-grids/grids/combined";
import "@infragistics/igniteui-react-grids/grids/themes/light/bootstrap.css";
const mods: any[] = [
IgrPropertyEditorPanelModule,
IgrGridModule
];
mods.forEach((m) => m.register());
export default class Sample extends React.Component<any, any> {
private grid: IgrGrid
private gridRef(r: IgrGrid) {
this.grid = r;
this.setState({});
}
private _pinningConfig1: IgrPinningConfig | null = null;
public get pinningConfig1(): IgrPinningConfig {
if (this._pinningConfig1 == null)
{
var pinningConfig1: IgrPinningConfig = {} as IgrPinningConfig;
pinningConfig1.rows = RowPinningPosition.Top;
this._pinningConfig1 = pinningConfig1;
}
return this._pinningConfig1;
}
private actionStrip: IgrActionStrip
private productName: IgrColumn
private unitPrice: IgrColumn
private unitsOnOrder: IgrColumn
private unitsInStock: IgrColumn
private quantityPerUnit: IgrColumn
private reorderLevel: IgrColumn
private discontinued: IgrColumn
constructor(props: any) {
super(props);
this.gridRef = this.gridRef.bind(this);
}
public render(): JSX.Element {
return (
<div className="container sample ig-typography">
<div className="container fill">
<IgrGrid
autoGenerate={false}
ref={this.gridRef}
data={this.nwindData}
rowEditable={true}
allowFiltering={true}
pinning={this.pinningConfig1}
primaryKey="ProductID">
<IgrActionStrip
name="actionStrip">
<IgrGridPinningActions
>
</IgrGridPinningActions>
<IgrGridEditingActions
editRow={true}
deleteRow={true}
addRow={true}>
</IgrGridEditingActions>
</IgrActionStrip>
<IgrColumn
name="ProductName"
field="ProductName"
header="Product Name">
</IgrColumn>
<IgrColumn
name="UnitPrice"
field="UnitPrice"
header="Unit Price">
</IgrColumn>
<IgrColumn
name="UnitsOnOrder"
field="UnitsOnOrder"
header="Units On Order">
</IgrColumn>
<IgrColumn
name="UnitsInStock"
field="UnitsInStock"
header="Units In Stock">
</IgrColumn>
<IgrColumn
name="QuantityPerUnit"
field="QuantityPerUnit"
header="Quantity Per Unit">
</IgrColumn>
<IgrColumn
name="ReorderLevel"
field="ReorderLevel"
header="Reorder Level">
</IgrColumn>
<IgrColumn
name="Discontinued"
field="Discontinued"
header="Discontinued">
</IgrColumn>
</IgrGrid>
</div>
</div>
);
}
private _nwindData: any[] = NwindData;
public get nwindData(): any[] {
return this._nwindData;
}
private _componentRenderer: ComponentRenderer = null;
public get renderer(): ComponentRenderer {
if (this._componentRenderer == null) {
this._componentRenderer = new ComponentRenderer();
var context = this._componentRenderer.context;
PropertyEditorPanelDescriptionModule.register(context);
WebGridDescriptionModule.register(context);
}
return this._componentRenderer;
}
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Sample/>);
tsx
このサンプルが気に入りましたか? 完全な Ignite UI for Reactツールキットにアクセスして、すばやく独自のアプリの作成を開始します。無料でダウンロードできます。
API リファレンス
コミュニティに参加して新しいアイデアをご提案ください。