How can I have 'dropdown' in an individual cell of a table in App Designer ?

58 views (last 30 days)
Hello,
with reference to this previous resolved question, I would like to apply a drop down list to a single cell of the table and not to the whole column.
Is it possible by using table or can you suggest a better implementation?
app.UITable.Data = {'female';'male';'male'}; % have 3 rows of gender information.
app.UITable.ColumnFormat = {{'male', 'female'}}; % have option cell array within ColumnFormat property to indicate the 1st column is using dropdown menus.
app.UITable.ColumnEditable = true;

Accepted Answer

gaoyi guo
gaoyi guo on 24 Feb 2022
I have solved it perfectly! Please adopt my answer if it is helpful!
My version is 2021a.
I used the 'categorical' function:
fig = uifigure;
a = categorical({'Blue','Red'}); % define a categorical type of variable a
col1 = {a(1);200}; % the recipe is quote an element in a!!!!
col2 = [400;'x'];
tdata = table(col1,col2); % define a table using the above columns
uit = uitable(fig,'Data',tdata,'ColumnEditable',true);
  1 Comment
xiao yu
xiao yu on 9 Apr 2023
Edited: xiao yu on 9 Apr 2023
Hi,
I am inspired by your approach and added a callback function.
Once a value changed in the first column, the corresponding row of the second column (not the whole column) will be changed to the corresponding category.
fig = uifigure;
channelNames=cell(10,1);
LabelNames=cell(10,1);
for i=1:10
if i<10
channelNames{i}=['channel 10' num2str(i)];
LabelNames{i}=['channel 10' num2str(i)];
else
channelNames{i}=['channel 1' num2str(i)];
LabelNames{i}=['channel 1' num2str(i)];
end
end
Meas={'Voltage';'Thermocoupler'};
TypesV= {'DC';'AC'};
TypesT= {'J';'Y'};
Meas=categorical(Meas);
TypesV=categorical(TypesV);
TypesT=categorical(TypesT);
Meas1={Meas(1);Meas(1);Meas(1);Meas(1);Meas(1);Meas(1);Meas(1);Meas(1);Meas(1);Meas(1)};
Type1={TypesV(1);TypesV(1);TypesV(1);TypesV(1);TypesV(1);TypesV(1);TypesV(1);TypesV(1);TypesV(1);TypesV(1)};
tdata = table(Meas1,Type1,LabelNames,'VariableNames',{'Mea','Type','Label'}); % define a table using the above columns
uit = uitable(fig,'Data',tdata,'ColumnEditable',true,...
'CellEditCallback',@(hObject,event)updateTable(hObject,event,TypesV,TypesT));
uit.UserData=tdata;
%%
function updateTable(hObject,event,TypesV,TypesT)
idx=event.Indices;
newData=event.NewData;
olddata=hObject.UserData;
tdata=hObject.Data;
row=idx(1);
col=idx(2);
if olddata.Mea{row}~=string(newData) && col==1
% consider only changes in the first column
if contains(string(newData),'Voltage')
tdata.Type{row}=TypesV(1);
elseif contains(string(newData),'Thermocoupler')
tdata.Type{row}=TypesT(1);
end
hObject.Data=tdata;
hObject.UserData=tdata;
end
end

Sign in to comment.

More Answers (1)

Sahithi Kanumarlapudi
Sahithi Kanumarlapudi on 23 Feb 2021
Hi,
'uidropdown' is normally used to create a dropdown in MATLAB. But, it's parent can only be 'Figure object (default) | Panel object | Tab object | ButtonGroup object | GridLayout object' as per the documentation here as of now.
Hope this helps!

Categories

Find more on Develop Apps Using App Designer in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!