React-data-grid:根据行的值更改行颜色

时间:2019-06-28 08:36:03

标签: reactjs react-data-grid

我的组件Test被调用并获得一个对象,该对象包含来自mysql请求的数据(从db.mytable中选择*)。我将this.props.data存储在一个状态中,并将其呈现在ReactDataGrid中。

我要做的是在ReactDataGrid中更改单元格的值时更新和更改行的颜色。例如,如果用户右键单击某行,则会显示一个上下文菜单,并且他可以在“检查”和“取消检查”之间进行选择。当他单击“检查”时,我想更新该行并使它显示为绿色。

我有一个数据库,用于存储“已检查”状态,因此当用户刷新页面时,该行应保持绿色。

我该怎么办?

2 个答案:

答案 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;
}

否则单元格的背景色会覆盖行的背景色