我的组件Test被调用并获得一个对象,该对象包含来自mysql请求的数据(从db.mytable中选择*)。我将this.props.data存储在一个状态中,并将其呈现在ReactDataGrid中。
我要做的是在ReactDataGrid中更改单元格的值时更新和更改行的颜色。例如,如果用户右键单击某行,则会显示一个上下文菜单,并且他可以在“检查”和“取消检查”之间进行选择。当他单击“检查”时,我想更新该行并使它显示为绿色。
我有一个数据库,用于存储“已检查”状态,因此当用户刷新页面时,该行应保持绿色。
我该怎么办?
答案 0 :(得分:0)
因此,当我单击上下文菜单中的check时,将调用此函数,它将更新包含以下行的状态表:
//right click then check
rowCheck = (rowIdx) => {
var tableState=this.state.tableState.concat([])
tableState[rowIdx.rowIdx].CHECKED='Y'
this.setState({tableState})
}
RowsRenderer函数:
RowRenderer = ({ renderBaseRow, ...props }) => {
const color = this.state.tableState[props.idx].CHECKED==='Y' ? "blue" : "";
return <div style={{color}}>{renderBaseRow(props)}</div>;
};
数据网格:
<ReactDataGrid
columns={this.state.column}
rowGetter={i => this.state.tableState[i]}
rowsCount={this.state.tableState.length}
minHeight={500}
enableCellSelect={true}
onGridRowsUpdated={this.onGridRowsUpdated}
cellNavigationMode={'changeRow'}
rowRenderer={this.RowRenderer}
contextMenu={
<ExampleContextMenu
onRowCheck={(e, {rowIdx})=>this.rowCheck({rowIdx})}
onRowUncheck={(e, { rowIdx }) => this.rowUncheck({rowIdx})}
/>
}
RowsContainer={ContextMenuTrigger}
rowSelection={{
showCheckbox: true,
enableShiftSelect: true,
onRowsSelected: this.onRowsSelected,
onRowsDeselected: this.onRowsDeselected,
selectBy: {
indexes: this.state.selectedIndexes
}
}}
/>
答案 1 :(得分:0)
添加到上述解决方案: 我想更改行的背景颜色而不是颜色本身,所以我最终向 div 包装器添加了一个类而不是样式。
<div className={classnames({ 'focused-row': focused })}>{data.renderBaseRow(data)}</div>
然后在我的css中添加
.focused-row .react-grid-Cell {
background-color: #f5deff !important;
}
否则单元格的背景色会覆盖行的背景色