How can I have 'dropdown' in an individual cell of a table in App Designer ?
60 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
Accepted Answer
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.
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
More Answers (1)
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 Apps Using App Designer 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!