【MATLAB App Desinger】uitable的控件进行单行的上下移动
背景
想实现对选中的单行(如第五行)进行上下移动

实现要点
(1)调用uitable控件的Selection属性
(2)表格数据分层四部分,如对于上移来说;第一部分为上部不动部分,即1:3行;第二部分为下移部分,即为第3行;第三部分为上移部分,即为第4行;第四部分为下部不动部分,即6:8行;主要操作为第二部分和第三部分互换。
实现代码
% 上移行
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
