Редактируемые функции в uitable не работают: данные таблицы недоступны для редактирования в этом месте.

Я хочу, чтобы мой uitable имел флажки, которые вы можете щелкнуть в нем. Если я сделаю это таким образом, я получу предупреждение: данные таблицы недоступны для редактирования в этом месте.

Как и сейчас, поля появляются, но вы не можете нажимать на них.

 p=figure
 D={'1', '2', '3' ,'4', '5','6'
    '7', '8', '9', '10', '11' ,'12'}
 data=D(:,1)
cnames={'', 'Left', 'Right','P1', 'P2', 'P3'}

table_resultat_nip=uitable('position',[0 200 500 200],...
   'parent',p,...
   'columnname', cnames,...
   'rowname', '',...
   'data',data,...
   'ColumnFormat',{'char','logical','logical','logical','logical','logical'},...
   'columneditable',[false, true, true, true, true, true])   ;

person user3796906    schedule 15.07.2014    source источник
comment
Я не могу воспроизвести вашу проблему, ваш код выглядит нормально. Пожалуйста, измените свой вопрос и включите исполняемый код, который можно просто скопировать и вставить, чтобы попробовать. Значит, включите пример данных и объявите все необходимые переменные.   -  person thewaywewalk    schedule 15.07.2014
comment
Хорошо, отредактировал, так что можешь просто скопировать и вставить!   -  person user3796906    schedule 15.07.2014


Ответы (1)


Данные ячеек, которые вы хотите изменить, должны быть в правильном формате.

Есть две проблемы:

1)

data = D(:,1);

Я понимаю, что вы просто хотите использовать данные первого столбца, но вам нужно объявить и другие столбцы как локальные.

2)

Ваши данные не соответствуют columnformat, поэтому лучше используйте:

D = {'1', false, false ,false, false, false; ...
     '7', false, false, false, false, false};

Решение:

D = {'1', '2', '3' ,'4', '5','6' ;
     '7', '8', '9', '10', '11' ,'12'};


data = [ D(:,1)  num2cell( false( size(D,1) , size(D,2)-1) ) ];
%// where the -1 depends on how many "real" data columns you have.

или более общий:

N = 1;   %// Number data columns to keep
data = [ D(:,1:N)  num2cell( false( size(D,1) , size(D,2)-N) ) ];

В целом, следующий код работает, теперь вам нужно применить его к вашему случаю:

p = figure;

D = {'1', '2', '3' ,'4', '5','6' ;
     '7', '8', '9', '10', '11' ,'12'};

data = [ D(:,1)  num2cell( false( size(D,1) , size(D,2)-1) ) ];

cnames = {'', 'Left', 'Right','P1', 'P2', 'P3'};

table_resultat_nip=uitable('position',[0 200 500 200],...
   'columnname', cnames,...
   'rowname', '',...
   'data',data,...
   'ColumnFormat',{'char','logical','logical','logical','logical','logical'},...
   'ColumnEditable',[false, true, true, true, true, true]...
   );

Относительно комментария:

Хорошо, еще более общий случай:

N = 1;   %// Number data columns to keep
M = 5;   %// Number of checkboxes desired

data = [ D(:,1:N)  num2cell( false( size(D,1) , M) ) ];
person thewaywewalk    schedule 15.07.2014
comment
Я получаю свои данные из другой таблицы, куда можно добавлять новые строки. Есть ли способ установить данные для этой таблицы, чтобы я просто получил первый столбец из старого и установил флажки в новом? - person user3796906; 15.07.2014
comment
Это работает для первых трех флажков, четвертого и пятого я получаю предупреждение: данные таблицы не редактируются в этом месте. Таблица, из которой я импортирую свои данные, состоит из 4 столбцов, это как-то связано с этим? в любом случае, спасибо за всю помощь, которую вы мне оказали! - person user3796906; 15.07.2014
comment
Ну, я предположил, что ваши данные имеют такое же количество столбцов, что и ваша таблица, как в вашем примере. Взгляните на последнюю правку. Пожалуйста, также примите ответ, если он наконец решил вашу проблему. Спасибо! - person thewaywewalk; 15.07.2014