找回密码
 立即注册

QQ登录

只需一步,快速开始

giao

注册会员

12

主题

29

帖子

109

积分

注册会员

积分
109
giao
注册会员   /  发表于:2022-10-13 17:55  /   查看:3513  /  回复:8
1金币
普通grid,存在自定义单元格事件,编辑单元格事件触发后删除表格数据,报错cant read property "binding" of underfined at GridPanel.getCellData

8 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于: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讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-13 18:13:24
地板
从错误代码确实没有办法判断问题,你可以先看一下具体是哪句代码执行报错了,把代码发上来
回复 使用道具 举报
giao
注册会员   /  发表于:2022-10-18 15:21:38
5#
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[e.col]
        if(col.binding==="name"){
            let item=s.rows[e.row].dataItem
            if(!item?.newFlag){
                e.cancel=true
            }
        }else{
            e.cancel=true
        }
    }
    cellEditEnded=(s,e)=>{
        let item=s.rows[e.row].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[col]
            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[newRowIndex].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
6#
Richard.Ma 发表于 2022-10-13 18:13
从错误代码确实没有办法判断问题,你可以先看一下具体是哪句代码执行报错了,把代码发上来

就这个,需求是点击新增 自动聚焦单元格,不聚焦好像就不会报错
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-18 18:56:31
7#
本帖最后由 Richard.Ma 于 2022-10-18 18:59 编辑

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

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

如果确实能重现问题的话,可以上传上来,这样也不会包含你们项目的数据
回复 使用道具 举报
giao
注册会员   /  发表于:2022-10-19 09:43:54
8#
附件代码,重现了报错问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-19 10:09:12
9#
收到,这边验证后给你回复
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部