giao 发表于 2022-10-13 17:55:00

flexGrid编辑结束删除所有表格数据后报错

普通grid,存在自定义单元格事件,编辑单元格事件触发后删除表格数据,报错cant read property "binding" of underfined at GridPanel.getCellData

Richard.Ma 发表于 2022-10-13 18:02:30

请上传一个重现问题的demo上来,我帮你看一下

giao 发表于 2022-10-13 18:05:06

Richard.Ma 发表于 2022-10-13 18:02
请上传一个重现问题的demo上来,我帮你看一下

内网,看不了.... ,grid编辑事件结束就报错

Richard.Ma 发表于 2022-10-13 18:13:24

从错误代码确实没有办法判断问题,你可以先看一下具体是哪句代码执行报错了,把代码发上来

giao 发表于 2022-10-18 15:21:38

Richard.Ma 发表于 2022-10-13 18:13
从错误代码确实没有办法判断问题,你可以先看一下具体是哪句代码执行报错了,把代码发上来

import React, { Component } from 'react'
import '@grapecity/wijmo.styles/wijmo.css';
import {FlexGrid,FlexGridColumn} from '@grapecity/wijmo.react.grid';
export default class Grid extends Component {
    constructor(props){
      super(props)
      this.state={
            data:[],
            columns:[
                {
                  binding:"name",
                  header:"名称",
                  width:220,
                },
                {
                  binding:"timer",
                  header:"编辑时间",
                  width:220,
                },
            ]

      }
    }

    beginningEdit=(s,e)=>{
      let col=s.columns
      if(col.binding==="name"){
            let item=s.rows.dataItem
            if(!item?.newFlag){
                e.cancel=true
            }
      }else{
            e.cancel=true
      }
    }
    cellEditEnded=(s,e)=>{
      let item=s.rows.dataItem
      if(item?.name===""){
            this.setState({data:[]})
      }
    }

    add=()=>{
      this.setState({data:[
            {
                id:null,
                name:"新建目录",
                newFlag:"newBuild",
                writeCategory:true
            }
      ]})
    }

    handInit=(grid)=>{
      this.grid=grid
      
      grid.gotFocus.addHandler(()=>{
            grid.startEditing(true)
      })
    }
    handleFormatItem=(gridPanel,cellRange)=>{
      const {rows,columns,cells}=gridPanel
      const {cell,col,row,panel}=cellRange
      if(cells===panel){
            const column=columns
            let rowIndex=row
            let dataItem=null
            let newRowIndex=gridPanel._items.length-1
            for(let i=0;i<gridPanel._items.length;i++){
                const element=gridPanel._items
                if(i===rowIndex){
                  dataItem=element
                }
            }
      
            if(dataItem){
                console.log(11,cell,dataItem,column,newRowIndex);
                this.handleFormatCell(cell,dataItem,column,newRowIndex)
            }
      }
    }
    handleFormatCell=(cell,dataItem,col,newRowIndex)=>{
      const {data}=this.state
      if(col.binding==="name"){
            if(dataItem?.newFlag){
                this.grid.setCellData(data.length,"name",dataItem.name)
                this.grid.select(newRowIndex,0)
                this.grid.rows.isSelected=true
                this.grid.startEditing()
            }else{
                cell.innerHTMl=`<div>111${col.index}</div>`
            }
      }
    }

render() {
      const {columns}=this.state
    return (
   <>
    {this.state.data.length>0&&<FlexGrid
      cellEditEnded={this.cellEditEnded}
      beginningEdit={this.beginningEdit}
      initialized={this.handInit}
      itemsSource={this.state.data}
      formatItem={this.handleFormatItem}
      >
          {columns.map((column,index)=>(
               < FlexGridColumn key={column?.binding||index} {...column}/>
          ))}
      </FlexGrid>}
         <button onClick={this.add}>新增目录</button>
   </>

    )
}
}

giao 发表于 2022-10-18 15:42:29

Richard.Ma 发表于 2022-10-13 18:13
从错误代码确实没有办法判断问题,你可以先看一下具体是哪句代码执行报错了,把代码发上来

就这个,需求是点击新增 自动聚焦单元格,不聚焦好像就不会报错

Richard.Ma 发表于 2022-10-18 18:56:31

本帖最后由 Richard.Ma 于 2022-10-18 18:59 编辑

不好意思,没有办法通过代码来判断问题原因,我这这边也测试了cellEditEnded事件中去设置DataSource为空,并没有报错

如果需要我们这边继续协助调研的话,建议你还是新建一个demo来重现问题,这个过程中你也可以排查看看问题具体是如何引起的。

如果确实能重现问题的话,可以上传上来,这样也不会包含你们项目的数据

giao 发表于 2022-10-19 09:43:54

附件代码,重现了报错问题

Richard.Ma 发表于 2022-10-19 10:09:12

收到,这边验证后给你回复
页: [1]
查看完整版本: flexGrid编辑结束删除所有表格数据后报错