Modify cell value of a row based on other cell value in same row uitable
Show older comments
Hi,
function uitable4_CellEditCallback(hObject, eventdata, handles)
a=get(handles.uitable4,'Data');
a = cell2table(a);
a.a6 = (10 / a.a5)*1^4; %where a.a6 is the column to be auto modify after editing column a.a5
a = table2cell(a);
set(handles.uitable4, 'Data',a);
Practically, I want every time I modify the value in a cell from a.a5 column, the a.a6 to be modified automaticaly, for the first row it's working but when I add another row i get the error:
To assign to or create a variable in a table, the number of rows must match the height of the table.
Practically, I unerstand the error but how to make the code working for every row? Thanks!
11 Comments
Simon Chan
on 8 Jun 2022
You may try to directly update the cell on another column (noticed the following example is assuming the cells are on the same row) based on the edited value.
function cellUpdate(src,event)
% Get the row number of your edited cell
rownum = event.Indices(1);
colnum = event.Indices(2);
% Doing some operation from the modified value and update the value on
% another column, following example is column #5.
src.Data(rownum,5)=src.Data(rownum,colnum)+1000; % Add 1000 to the new value
end
Simon Chan
on 8 Jun 2022
Forgot to mention that you can modify the content of your callback based on the example. Sorry about that.
function uitable4_CellEditCallback(hObject, eventdata, handles)
% Get the row number of your edited cell
rownum = eventdata.Indices(1);
colnum = eventdata.Indices(2);
% Doing some operation from the modified value and update the value on
% another column, following example is column #5.
hObject.Data(rownum,5)=hObject.Data(rownum,colnum)+1000; % Add 1000 to the new value
end
Cristian Martin
on 8 Jun 2022
Simon Chan
on 8 Jun 2022
They represent the row and column number of your edited cell.
So you can easily extract the updated data inside the callback
Cristian Martin
on 8 Jun 2022
Simon Chan
on 8 Jun 2022
Change to Curly braces, {}
hObject.Data{rownum,5}=hObject.Data{rownum,colnum}+1000
Cristian Martin
on 8 Jun 2022
Simon Chan
on 8 Jun 2022
The callback would update each cell individually.
When the user updated the first cell, the callback automatically update the value on another column. So the callback can do it for you for any rows.
Cristian Martin
on 8 Jun 2022
Edited: Cristian Martin
on 8 Jun 2022
Simon Chan
on 8 Jun 2022
Edited: Simon Chan
on 8 Jun 2022
This is another issue, you need to make uitable editable as follows:
Assume your uitable have 6 columns and if you would like to allow user to edit column 5 only, do the following.
uitable4.ColumnEditable=[false,false,false,false,true,false]
OR only update column 6 when column 5 is being edited.
function uitable4_CellEditCallback(hObject, eventdata, handles)
% Get the row number of your edited cell
rownum = eventdata.Indices(1);
colnum = eventdata.Indices(2);
% Update column 6 when column 5 has a new value
if isequal(colnum,5)
hObject.Data(rownum,6)=hObject.Data(rownum,colnum)+1000; % Add 1000 to the new value
end
end
Cristian Martin
on 8 Jun 2022
Accepted Answer
More Answers (0)
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!