How to validate user input in a UITable between three values?

I just one the user gives numbers either 0.5, 0.7 or 1
function damage
% Create table array
t = readtable('Country.xls');
vars = {'Damage','G','k1','k2','k3','k4'};
t = t(1:32,vars);
% Create UI figure
fig = uifigure;
% Create table UI component
uit = uitable(fig);
uit.Data = t;
% uit.ColumnSortable = true;
uit.ColumnEditable = [false false true true true true];
uit.CellEditCallback = @k1CheckCB;
end
I did another function like this, but I'm not sure how it is supossed to work with a triple conditional
function k1CheckCB(t)
if (t.k1 == 0.5 || t.k1 == 0.7 || t.k1 == 1.0)
tableData = uit.Data;
tableData{t.k1} = t.PreviousData;
uit.Data = tableData;
warning('Extent values are only 0.5, 0.7 and 1.0')
end
end

 Accepted Answer

Why not a drop down selection of three values?

7 Comments

could I use categorical?
% Drop down
extent = uicontrol('style','popup','string',{'0.5';'0.8';'1.0'});
t.k1 = extent;
like this I don't know how to assign values
A simple way is to only modify your callback function to something like this:
function k1CheckCB(hObj, t)
if ~ismember(t.NewData, [0.5 0.7 1.0])
% no good.
warning('Exten must be 0.5, 0.7, or 1.0');
% reset
data = hObj.Data;
data(t.Indices(1), t.Indices(2)) = t.PreviousData;
hObj.Data = data;
end
end
sorry to ask again if I look only in the third column is the Previous Data correct? (I got an error in the index array)
if (t.Indices(3) == 3 && ...
~ismember(t.NewData, [0.5 0.7 1.0]))
% no good.
warning('Exten must be 0.5, 0.7, or 1.0');
% reset
data = hObject.Data;
data{t.Indices(1), t.Indices(2), t.Indices(3)} = t.PreviousData;
hObject.Data = data;
end
Oh, k1 is the 3rd column, right? Then you are looking at t.Indices(2) = 3. If you only want to check the k1 column and don't need to worry about the other columns:
function k1CheckCB(hObj, t)
if t.Indices(2) == 3 % only care about the k1 column
if ~ismember(t.NewData, [0.5 0.7 1.0])
% no good.
warning('Exten must be 0.5, 0.7, or 1.0');
% reset
data = hObj.Data;
data(t.Indices(1), t.Indices(2)) = t.PreviousData;
hObj.Data = data;
end
end
end
I understand, it is because I wanted to limit only to those values for that k1 column (values either 0.5, 0.7 or 1), but I saw that ~ismember for a row values, before as you mentioned I wanted to assign a drop down bottom but I got also a mistake
something like this:
extent = categorical(t.k1,{'0.5','0.7','1.0'});
t.k1 = extent;
@Yongjian Feng thank you so much again, it is working

Sign in to comment.

More Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!