Matlab App Designer:表格控件单元格锁定设置

背景

        对下面的表格控件,想实现灰色单元格部分所有的列不允许修改,而白色单元格部分,仅“显示”列才能修改。

        需求可整理如下:         1.“列名称”都不允许修改;

         2.“显示列”灰色部分不允许修改,而白色单元格可以修改

表格控件

编写逻辑

    1.在操作过程中,为实现<需求1:“列名称”都不允许修改>可以通过对表格控件的属性

ColumnEditable进行设置:

Handle.ColumnEditable = [true,false]

    2.基于以上,若是通过选中单元格后再进行修改,则可以通过表格回调

CellSelectionCallback进行设置,如下面截图所示

箭头所示部分为选中单元格,选中后再修改单元格内容

        对应的回调写法为:

       if max(source.Selection==[2 3 ])==1 % 表格控件的属性Multiselect为‘off’,属性SelectionType为‘row’            Handle.ColumnEditable(1)  =false;        else; Handle.ColumnEditable(1)  =true;        end

这样就实现了选中单元格时,通过控制表格属性ColumnEditable的值来实现选中单元格的是否允许修改。

    3.在2中的设置方式,仅支持选中单元格内容编辑,但对于本次项目中的checkbox的修改却是不合适的。这是因为在MATLAB 2023b版本中,在ColumnEditable(1)=true时,直接点击灰色的“显示”列中的checkbox进行修改是不会首先触发表格回调CellSelectionCallback的

    为解决这个问题,还需要使用表格回调CellEditCallback来进行设置,对应的编写逻辑为,若修改的数据位于灰色单元格部分,则直接给修改后的数据重新再次赋值为默认数据(event.PreviousData),对应的回调内容编写如下:

  if max(event.Indices(:,1)==[ 2 3 ])==1 % 表格控件的属性Multiselect为‘off’,属性SelectionType为‘row’           Handle.ColumnEditable(1)  =false;            source.Data(event.Indices(:,1),1) ={event.PreviousData}; % 程序执行到此时,通过强制将PreviousData再次赋值给表格控件来实现表格内容的伪保持        else; Handle.ColumnEditable(1)  =true;        end

选中第二行时,对单元[4,1]的checkbox(箭头部分)进行修改时,此时true已经变成false,下次需要再次赋值为false

 强调

        在情况3中,表格内容修改时(如上图箭头所示),回调CellEditCallback已经触发,但表格控件的source.Selection还等于2(也就是说回调CellSelectionCallback此时还没有触发)。也就是说回调触发优先级排序上,回调CellEditCallback>回调CellSelectionCallback

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空