【MATLAB App Desinger】uitable的控件進行單行的上下移動
背景
想實現(xiàn)對選中的單行(如第五行)進行上下移動

實現(xiàn)要點
(1)調(diào)用uitable控件的Selection屬性
(2)表格數(shù)據(jù)分層四部分,如對于上移來說;第一部分為上部不動部分,即1:3行;第二部分為下移部分,即為第3行;第三部分為上移部分,即為第4行;第四部分為下部不動部分,即6:8行;主要操作為第二部分和第三部分互換。
實現(xiàn)代碼
% 上移行
?if ~isempty( TableHandle.Selection )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ID = unique(TableHandle.Selection(:,1));
? ? ? ? ? ? ? ? ? ? ? ? ? ? for ii = 1 : length(ID)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ID(ii)-2 > 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_UP = TableHandle.Data(1:ID(ii,1)-2,:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else;CurrentTableData_UP = [];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_Move = TableHandle.Data(ID(ii,1)-1,:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_Middle = TableHandle.Data(ID(ii,1),:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ID(ii)+1 <= height(TableHandle.Data)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_Down = TableHandle.Data(ID(ii,1)+1:end,:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else;CurrentTableData_Down = [];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ~isempty(CurrentTableData_UP)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Data = vertcat(CurrentTableData_UP,CurrentTableData_Middle);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else;TableHandle.Data = CurrentTableData_Middle;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Data = vertcat(TableHandle.Data ,CurrentTableData_Move);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ~isempty(CurrentTableData_Down)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Data = vertcat(TableHandle.Data,CurrentTableData_Down);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? removeStyle(TableHandle);
? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Selection = horzcat(ID-1,ones(length(ID),1));
? ? ? ? ? ? ? ? ? ? ? ? ? ? addStyle(TableHandle,uistyle('BackgroundColor','green'),'row',TableHandle.Selection(:,1));
? ? ? ? ? ? ? ? ? ? ? ? end

下移行
if ~isempty( TableHandle.Selection )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ID = unique(TableHandle.Selection(:,1));
? ? ? ? ? ? ? ? ? ? ? ? ? ? for ii = 1 : length(ID)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ID(ii,1)-1 > 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_UP = TableHandle.Data(1:ID(ii,1)-1,:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else;CurrentTableData_UP = [];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_Middle = TableHandle.Data(ID(ii,1),:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_Move = TableHandle.Data(ID(ii,1)+1,:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ID(ii)+2 <= height(TableHandle.Data)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CurrentTableData_Down = TableHandle.Data(ID(ii,1)+2:end,:);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else;CurrentTableData_Down = [];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ~isempty(CurrentTableData_UP)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Data = vertcat(CurrentTableData_UP,CurrentTableData_Move);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else;TableHandle.Data = CurrentTableData_Move;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Data = vertcat(TableHandle.Data ,CurrentTableData_Middle);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ~isempty(CurrentTableData_Down)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Data = vertcat(TableHandle.Data,CurrentTableData_Down);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? ? ? ? ? removeStyle(TableHandle);
? ? ? ? ? ? ? ? ? ? ? ? ? ? TableHandle.Selection = horzcat(ID+1,ones(length(ID),1));
? ? ? ? ? ? ? ? ? ? ? ? ? ? addStyle(TableHandle,uistyle('BackgroundColor','green'),'row',TableHandle.Selection(:,1));
? ? ? ? ? ? ? ? ? ? ? ? end
