How to detect the uitable on GUI

3 views (last 30 days)
han han
han han on 4 Jul 2020
Answered: Image Analyst on 4 Jul 2020
I wnat to detect whether the uitable on the GUI is empty.
but it shows "Input #2 expected to be a cell array, was double instead."
If I change the data format to cell, it will not be able to enter "all(cellfun(@isempty, data(:)))"
data = get(handles.uitable1);
if all(cellfun(@isempty, data(:)))
errordlg('uitable is empty','warning');
else
disp('not empty');
end
how modifity it?
  2 Comments
Mehmed Saad
Mehmed Saad on 4 Jul 2020
this error is occuring in someother line of code. can you share the complete code?
han han
han han on 4 Jul 2020
Edited: han han on 4 Jul 2020
sure
function varargout = u11ntitled(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @u11ntitled_OpeningFcn, ...
'gui_OutputFcn', @u11ntitled_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before u11ntitled is made visible.
function u11ntitled_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to u11ntitled (see VARARGIN)
% Choose default command line output for u11ntitled
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes u11ntitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = u11ntitled_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% --- Executes on button press in next.
function next_Callback(hObject, eventdata, handles)
set(handles.uipanel2,'Visible','on') %go to uipanel1
data = get(handles.uitable1);
if all(cellfun(@isempty, data(:)))
errordlg('uitable is empty','warning');
else
disp('not empty');
end
% --- Executes on button press in back.
function back_Callback(hObject, eventdata, handles)
set(handles.uipanel2,'Visible','off') %back to uipanel1
% --- Executes on button press in show.
function show_Callback(hObject, eventdata, handles)
[BSLocation] = textread('Convert\BSLocation.txt','','headerlines', 1);
BSX = num2str(BSLocation(:,1));
BSX = cellstr(BSX);
BSY = num2str(BSLocation(:,2));
BSY = cellstr(BSY);
BSZ = num2str(BSLocation(:,3));
BSZ = cellstr(BSZ);
set(handles.Uitable1,'Data',[BSX BSY BSZ]);

Sign in to comment.

Answers (2)

Mehmed Saad
Mehmed Saad on 4 Jul 2020
all(cellfun(@isempty, data(:)))
error is in this line. data(:) is a double array on which you are trying to apply cellfun
also you have uitable1 and Uitable1 which are seperate variables (means two seperate table).
If uitable1 is a table this should be your command
data = get(handles.uitable1,'Data');
and now the data is not a cellarray so cellfun is not required
you can apply isempty directly
For example
t = readtable('patients.xls');
vars = {'Age','Systolic','Diastolic','Smoker'};
t1 = t(1:0,vars);
fig = uifigure;
uit = uitable(fig,'Data',t1);
Now check if it is empty
if(isempty(uit.Data))
t2 = t{1:4,vars};
uit.Data = t2;
end

Image Analyst
Image Analyst on 4 Jul 2020
You can use isempty() to determine if a variable is null.
You can use iscell() to determine if a variable is a cell array.
There is a function called isa() that lets you check whether a variable is of a specified class, like double, uint8, cell, etc.

Categories

Find more on Graphics Object Programming 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!