如何在React中删除MUI X DataGrid内复选框选中的多行数据?
React中通过复选框删除MUI X DataGrid行数据的实现
我需要在React项目中实现通过复选框删除MUI X DataGrid 内的行数据,目前没有找到适配DataGrid的相关教程,仅能找到针对MaterialTable的实现教程,二者逻辑并不通用,希望得到可行的实现方案。

适配完成的完整代码
以下是我根据解决方案适配后的可运行完整代码:
import React, { useState, useEffect, Fragment } from 'react' import {db} from './firebase'; import { useHistory, useLocation } from 'react-router-dom'; import "./ListadoEstudiantes.css" import * as locales from '@mui/material/locale'; import { DataGrid, GridRowsProp, GridColDef, GridToolbarContainer, GridToolbarColumnsButton, GridToolbarFilterButton, GridToolbarExport, GridToolbarDensitySelector} from '@mui/x-data-grid'; import { Button, Container } from "@material-ui/core"; import { IconButton} from '@mui/material'; import PersonAddIcon from '@mui/icons-material/PersonAddSharp'; import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined'; import { Box } from '@mui/system'; function ListadoEstudiantes({user}) { const history = useHistory(""); const crearEstudiante = () => { history.push("/Crear_Estudiante"); }; const [estudiantesData, setEstudiantesData] = useState([]) const parseData = { pathname: '/Crear_Pedidos', data: estudiantesData } const realizarPedidos = () => { if(estudiantesData == 0) { window.alert("Seleccione al menos un estudiante") } else { history.push(estudiantesData); } }; function CustomToolbar() { return ( <GridToolbarContainer> <GridToolbarFilterButton /> <GridToolbarDensitySelector /> </GridToolbarContainer> ); } const [estudiantes, setEstudiantes] = useState([]); const [selectionModel, setSelectionModel] = useState([]); const columns = [ { field: 'id', headerName: 'ID', width: 100 }, {field: 'nombre', headerName: 'Nombre', width: 200}, {field: 'colegio', headerName: 'Colegio', width: 250}, {field: 'grado', headerName: 'Grado', width: 150}, { field: "delete", width: 75, sortable: false, disableColumnMenu: true, renderHeader: () => { return ( <IconButton onClick={() => { const selectedIDs = new Set(selectionModel); setEstudiantes((r) => r.filter((x) => !selectedIDs.has(x.id))); }} > <DeleteOutlinedIcon /> </IconButton> ); } } ]; const estudiantesRef = db.collection("usuarios").doc(user.uid).collection("estudiantes") useEffect(() => { estudiantesRef.onSnapshot(snapshot => { const tempData = []; snapshot.forEach((doc) => { const data = doc.data(); tempData.push(data); }); setEstudiantes(tempData); }) }, []); return ( <Container fixed> <Box mb={5} pt={2} sx={{textAlign:'center'}}> <Button startIcon = {<PersonAddIcon />} variant = "contained" color = "primary" size = "medium" onClick={crearEstudiante} > Crear Estudiantes </Button> <Box pl={25} pt={2} sx={{height: '390px', width: "850px", textAlign:'center'}}> <DataGrid rows={estudiantes} columns={columns} pageSize={5} rowsPerPageOptions={[5]} components={{ Toolbar: CustomToolbar, }} checkboxSelection //Store Data from the row in another variable onSelectionModelChange = {(id) => { setSelectionModel(id); const selectedIDs = new Set(id); const selectedRowData = estudiantes.filter((row) => selectedIDs.has(row.id) ); setEstudiantesData(selectedRowData) console.log(estudiantesData); } } {...estudiantes} /> </Box></Box></Container> ) } export default ListadoEstudiantes
功能验证
所有功能现已正常运行。
内容的提问来源于stack exchange,提问作者React Enjoyer
相关产品推荐
相关产品推荐

