2013-10-26 63 views
1

我在MATLAB R2012b中使用GUIDE,並且有一個uitable帶有可編輯的邏輯複選框。細胞編輯回調如下:MATLAB的可用邏輯複選框沒有被檢查

function data_table_CellEditCallback(hObject, eventdata, handles) 
row = eventdata.Indices(1); 
column = eventdata.Indices(2); 
if column ~= 1 % The checkboxes are all in the first row. 
    guidata(hObject,handles); 
    return; 
end 
table_data = get(hObject,'Data'); 
if table_data(row,column) == true 
    table_data(row,column) = false; 
else 
    table_data(row,column) = true; 
end 
set(hObject, 'Data', table_data); 
handles.checked(row) = table_data(row,column); % Variable holding the data. 
guidata(hObject,handles); 
end 

當我點擊複選框中的一個,我可以看到,在該表中的數據得到適當更新(包括get(hObject,'Data')handles.checked(row)返回更新後的值),但實際的複選框在GUI中不會在視覺上被檢查。如果再次單擊它,變量會再次更新,但複選框仍未選中。

所以數據正在更新,但GUI不是。這裏出了什麼問題?

注意:邏輯複選框設置爲可在GUIDE中編輯,所以這不是問題。

回答

2

用於設置datagrid的'Data'屬性的數組通常是一個單元格數組。

當執行回調時,數組中的值將反映複選框的當前狀態。也就是說,你不需要設置它們。

如果你想設置TABLE_DATA,你應該使用類似:

table_data{row,column} = eventdata.NewData; 

順便說一句,我假設你已經在指南表屬性編輯器設置列格式爲「邏輯」。