【问题标题】:Matlab: check cell status inside uitableMatlab:检查uitable内部的单元格状态
【发布时间】:2013-12-11 10:38:38
【问题描述】:

我希望创建一个 if 语句来检查 uitable 中逻辑列的特定单元格是真还是假。因此,如何检查逻辑单元格状态(单击按钮时,未显示)?

脚本:

% Table
c1 = rand(10,3);
h = uitable('Units','normalized', 'Position',[0 0 1 1], 'Data',c1);

%# add new column of check boxes to table
c2 = c1(:,1)>0.5;
set(h, 'Data',[num2cell(c1) num2cell(c2)], 'ColumnFormat',[repmat({[]},1,size(c1,2)),'logical'], 'ColumnEditable',[false(1,size(c1,2)),true])

【问题讨论】:

  • 不确定我是否遇到了问题,...您可以随时通过get(h, 'Data') 获取当前表格内容,就像您在上面设置它一样代码。这有什么问题吗?
  • 我想知道被点击的复选框的行号(第 4 列)。
  • 你需要设置CellSelectionCallback,它返回行和列的索引。然后在回调函数中通过get(yourUItablehandle, 'Data') 获取完整数据并使用之前获得的索引对其进行寻址。
  • 谢谢。您能否解释一下如何使用 CellSelectionCallback。是否可以在 Button_Callback 中使用它,因为我的主要想法是选择将被保存的行。再次感谢。
  • @thewaywewalk 我想应该是CellEditCallback !?

标签: matlab matlab-uitable


【解决方案1】:

如果您想在按钮回调中获取选定的行,则不需要 CellSelection/CellEditCallback。

正如我在第一条评论中建议的那样,只需获取数据并找到选定的行:

function button_callback(hObject, evt, handles)

    % get the data - identical to setting the data
    data = get(handles.tableHandle, 'Data');
    checkBoxColumn = 4;

    % logical indices of selected rows
    isRowSelected = [data{:, checkBoxColumn}];

    % if you want the indices
    idxSelectedRows = find(isRowSelected);
end

【讨论】:

  • 谢谢。我使用了 CellEditCallback,因为没有它我无法关闭/打开复选框。此外,它应该可以工作,但不是获取行号,而是获取多少行(例如,1 2 3)。知道为什么吗?
  • 并非如此。在我的解决方案中,isRowSelected 应该是一个逻辑向量,其元素与表中的行数一样多,idxSelectedRows 应该包含选定行的索引。通常你不需要 CellEditcallback...
  • 非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多