2020-10-12 MATLAB App Designer—鎖定uitable控件內(nèi)部分單元格(非列)
背景
工作中遇到一個情況,就是要設(shè)置下面圖中,黑色的單元格內(nèi)容無論怎么修改 true 或者 false 都顯示為 false的情況

嘗試
1.對于uitable控件來說,采用ColumnEditable屬性控制
只適用于列控制,故僅修改列的ColumnEditable屬性是無法實(shí)現(xiàn)的
2.針對方法1進(jìn)行修改,實(shí)現(xiàn)功能:當(dāng)鼠標(biāo)點(diǎn)選黑色單元格的時候,設(shè)置該列屬性ColumnEditable為false,表格選中的回調(diào)函數(shù)代碼如下:
? ? % 表名?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 存在一個問題,采用鼠標(biāo)修改Sheet1和時程列的true和false時,matlab支持單元格選中在點(diǎn)擊checkbox修改(2方法適用)和直接點(diǎn)擊checkbox修改(2方法則不適用,程序報(bào)錯)
3.對表格控件的DisplayDataChangedFcn進(jìn)行修改,凡是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; % 將剔除后的數(shù)據(jù)傳遞給表格控件
評價(jià)
推薦方法3,支持matlab單元格選中在點(diǎn)擊checkbox修改(2方法適用)和直接點(diǎn)擊checkbox修改的兩種途徑