How can I have 'dropdown' in an individual cell of a table in App Designer ?
62 views (last 30 days)
Show older comments
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;
0 Comments
Answers (2)
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
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.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1350509/image.gif)
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
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!
0 Comments
See Also
Categories
Find more on Develop uifigure-Based Apps 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!