背景
工作中遇到一个情况,就是要设置下面图中,黑色的单元格内容无论怎么修改 true 或者 false 都显示为 false的情况
实例图片
尝试
1.对于uitable控件来说,采用ColumnEditable属性控制
只适用于列控制,故仅修改列的ColumnEditable属性是无法实现的
2.针对方法1进行修改,实现功能:当鼠标点选黑色单元格的时候,设置该列属性ColumnEditable为false,表格选中的回调函数代码如下:
% 表名 app.ViewAnalysisData Id = cell2mat(arrayfun(@(x)sum( ... source.StyleConfigurations.Style(x).BackgroundColor)==3,... (1:height(source.StyleConfigurations)),'Un',false))==1; Id = source.StyleConfigurations.TargetIndex{Id}==event.Indices; if max(Id(:,1)&Id(:,2))==1 app.ViewAnalysisData.ColumnEditable(unique(event.Indices(:,2))) = true; else app.ViewAnalysisData.ColumnEditable(unique(event.Indices(:,2))) = false; end
方法2 存在一个问题,采用鼠标修改Sheet1和时程列的true和false时,matlab支持单元格选中在点击checkbox修改(2方法适用)和直接点击checkbox修改(2方法则不适用,程序报错)
3.对表格控件的DisplayDataChangedFcn进行修改,凡是source.Data中包含黑色单元格的均不传递给表格控件app.ViewAnalysisData.Data,代码如下:
% 表名 app.ViewAnalysisData Id = cell2mat(arrayfun(@(x)sum( ... app.ViewAnalysisData.StyleConfigurations.Style(x).BackgroundColor)==0,... (1:height(app.ViewAnalysisData.StyleConfigurations)),'Un',false))==1; Id = app.ViewAnalysisData.StyleConfigurations.TargetIndex{Id==1}; % 获取黑色单元格的单元的Indices source.Data(Id(:,1),Id(:,2)) = {''}; % 删除包含黑色单元格的单元Indices app.ViewAnalysisData.Data = source.Data; % 将剔除后的数据传递给表格控件
评价
推荐方法3,支持matlab单元格选中在点击checkbox修改(2方法适用)和直接点击checkbox修改的两种途径