概要
DataGrid にボタンを配置するサンプル。
こういうの。
ボタン押下でパラメータを渡せるようにする。
一覧のロジック
import * as React from 'react';
import { DataGrid } from '@material-ui/data-grid';
import Button from '@material-ui/core/Button';
import DeleteButton from './DeleteButton';
// カラム
const columns = [
// 削除ボタン
{
field: 'deleteBtn',
headerName: '削除',
sortable: false,
width: 90,
disableClickEventBubbling: true,
renderCell: (params) => <DeleteButton rowId={ params.id } />
},
// 詳細ボタン
{
field: 'editBtn',
headerName: '詳細',
sortable: false,
width: 90,
disableClickEventBubbling: true,
renderCell: (params) => <Button variant="contained" color="primary">詳細</Button>
},
{ field: 'id', headerName: 'ID', width: 100 },
{ field: 'title', headerName: '本のタイトル', width: 250 },
];
// データ
const rows = [
{ id: 1, title: '君の膵臓をたべたい' },
{ id: 2, title: '容疑者Xの献身' },
{ id: 3, title: 'コンビニ人間' },
{ id: 4, title: '蹴りたい背中' },
{ id: 5, title: '世界の中心で、愛を叫ぶ' },
];
export default function DataGridDemo() {
return (
<div style={{ height: 400, width: 600 }}>
<DataGrid rows={rows} columns={columns} pageSize={5} />
</div>
);
}
削除ボタンのロジック
import React, { useState } from 'react';
import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core';
const DeleteButtonDialog = ({ rowId }) => {
const [open, setOpen] = useState(false); // 確認ダイアログの表示/非表示
const handleOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
const deleteRow = (rowId, e) => {
// (ここで削除処理)
setOpen(false);
};
return (
<div>
<Button variant="outlined" color="primary" onClick={handleOpen}>
削除
</Button>
<Dialog
open={open}
onClose={handleClose}
aria-labelledby="alert-dialog-title"
aria-describedby="alert-dialog-description"
>
<DialogTitle id="alert-dialog-title">{'確認'}</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-description">ID「{rowId}」を本当に削除しますか?</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant="outlined" color="primary" autoFocus>
やめる
</Button>
<Button onClick={(e) => deleteRow(rowId, e)} color="primary">
削除する
</Button>
</DialogActions>
</Dialog>
</div>
);
};
export default DeleteButtonDialog;
CodesandboxのURLを貼っておきます。