首页 >> 大全

Antd表格之行/列合并

2023-09-12 大全 29 作者:考证青年

Antd--表格之行/列合并

注意:antd官方行/列合并参考:#-table-demo--, 感觉网上大多是直接复制的antd代码。大家可以从这个链接,直到antd,或者您可以搜素antd官网进行查看

表格行/列合并

表头只支持列合并,使用 里的 进行设置。

表格支持行/列合并,使用 里的单元格属性 或者 设值为 0 时,设置的表格不会渲染。

合并关键词:[行合并] [列合并]

以上是Antd原展示,以及说明,这里大家可以直接跳转上面的连接查看相关说明。

我遇到的问题是:对于可编辑表格的数据合并。

1.如何处理表格可编辑。

_表格按行合并单元格_表格怎么合并行列

2.如何标记编辑了哪一行[特别是跨行的时候]

3.提交数据【数据保存】

问题1解决:如何处理表格可编辑

其实如果你留意antd说明,你大概就知道了,antd中对于数据每一列,有一个方法

onst columns = [{title: '姓名',dataIndex: 'name',render(text, row, index) {                     	// *** 1:关键就是这个render方法 ***if (index < 4) { return {text};  }return {children: {text}, 			 //*** 2:可编辑关键就是这个 props: {  colSpan: 5,  },                 	 // *** 3:合并行列关键};},
}]

注释1:表明我们可以通过这个方法任意扩展,需要的业务逻辑

注释2:表明我们可以返回任意的htm标签【当然包括input类,以及自己封装的组件】

注释3:这个对象我们可以设置,用来合并行列【跨列,跨行】

代码实现【部分】:

 const columns = [{title:  "节点名称",dataIndex: "nodename", render(value, row, index) {  return that.fnGetRowSpanMerge(row, index, {value});    },},{title:  "节点前附加操作",dataIndex: "action_node_pre", render(value, row, index) {return that.fnGetRowSpanMerge(row, index, that.fnGetBrowBtn(row, getLabel(388414, "契约锁") + "action", "action_node_pre", true, false));},}]/**  获取行并信息 @value 文本值 @row 整行的数据 @index 行下标 @children ta的数据格式具体 @ishow 是否显示空数据  */fnGetRowSpanMerge = (row, index, children, ishow) => {//这个方法用来跨行跨列const obj = {props: {rowSpan: 1,},children: children,}if (row.linksize > 1 && !ishow) {//包含跨行,且不显示多行相同数据obj.props.rowSpan = row.rowspan;} return obj;}/** * 获取浏览按钮的信息  @param row 行信息 @param title 浏览框title  @param id 数据源id @param isnode 是否是节点  @param islink 是否是出口  @returns {*}  */fnGetBrowBtn = (row, title, id, isnode, islink) => {//通过该方法返回表格数据, 可以是check,select, input,以及封装的组件let replacedatas = toJS(row[id + "rep"]);return ({xxx}}/>);//目前是自己封装的组件   注意onchange时间}

问题2解决:如何标记编辑了哪一行[特别是夸行的时候]

主要利用解决问题1时预留的事件进行修改数据。

这里注意一点:既然你在合并这几行。那么标志着你不关心这些行,或者这些行数据一直。那么我们可以管理整个表单的数据,使这些行数据数据相同即可,

/*** 附加操作onchange事件,这里主要是正对浏览按钮* @param ids_value 改变后的ids值* @param names_value 改变后的value值* @param datas 改变数据的封装【可以传null】* @param row 所属改变行的整体数据* @param id 列id* @param isnode 是否是节点* @param islink 是否是出口*/fnAdditionalChange = (ids_value, names_value, datas, row, id, isnode, islink) => {const {myCusIntSet} = this.props;				//使用可编辑表格,那么肯定会有一个原始数据供我们操作,这里就是tabledataconst {tabledata, updateTableData} = myCusIntSet;tabledata && tabledata.map(item => {if (isnode && item.nodeid == row.nodeid) {//这里就是同步所有行的数据一致item[id] = ids_value;item[id + "span"] = names_value;}if (islink && item.linkid == row.linkid) {//这里是同步所有列的数据一致item[id] = ids_value;item[id + "span"] = names_value;}})tabledata && updateTableData(toJS(tabledata));}

解决关键:对于原始数据上操作时,相同的行列数据,给定特定的标识符【用同样的id,或者其他属性】

问题3解决:提交数据【数据保存】

这里我们可以通过set集合判断数据是否重复,从而去掉重复数据。或者执行数据持久时,先判断数据是否存在,存在相同数据则不保存即可。

特别注意:对于这种可编辑数据我们传递给后台需要做数据转换前端:JSON.(), 后端: .();//转json数组.具体请参看我的另外一篇文章【我的JSON问题】

到此结束:欢迎大家指导。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了