1

我对 Matlab 中的 GUI 比较陌生,我使用 GUIDE 创建了一个简单的 GUI。我想连接到一个数据库(已经定义并且正在工作!)并使用数据库中的值填充一个列表框,以便用户可以选择使用哪个(在这种情况下它们是化合物)。我还没有找到关于如何以这种方式填充列表框的好的教程或线索。到目前为止,我有:

function load_listbox(hObject,handles) 

    conn = database('antoine_db','','');
    setdbprefs('datareturnformat','structure'); %sets the db preferences to a structure
    query = 'SELECT ID,"Compound Name" FROM antoine_data ORDER BY ID';

    result = fetch(conn,query);

    %%The following creates a structure containing the names and ID's
    %%of everything in the database
    data = struct([]);
    for i=1:length(result.ID)
        data(i).id =   result.ID(i);
        data(i).name = char(result.CompoundName(i));
    end


    names = data.name;
    handles.compounds = names;
    whos;
    set(handles.listbox1,'String',handles.compounds,'Value',1);

    handles.output = hObject;

    % Update handles structure
    guidata(hObject, handles);

end

从这样的数据库(或大数组)中填充列表框的最简单方法是什么?截至目前,列表框仅填充了名称中的第一项,这是因为名称仅包含第一项。虽然,如果我只显示“data.name”,我会得到列表中 300 项的整个列表!

4

1 回答 1

1

我知道了!所以,问题是我正在将 data.name 转换为字符-> 最初它是一个单元格。因此,我names(i) = data(i).name;在 for 循环中添加,并删除names=data.name;它现在填充了化合物的所有名称!工作函数如下所示:

function load_listbox(hObject,handles) 

    conn = database('antoine_db','','');
    setdbprefs('datareturnformat','structure'); %sets the db preferences to a structure
    query = 'SELECT ID,"Compound Name" FROM antoine_data ORDER BY ID';

    result = fetch(conn,query);

    %%The following creates a structure containing the names and ID's
    %%of everything in the database
    data = struct([]);
    for i=1:length(result.ID)
        data(i).id =   result.ID(i);
        data(i).name = (result.CompoundName(i));        %this is a cell
        names(i) = data(i).name;
    end



    handles.compounds = names;
    set(handles.listbox1,'String',handles.compounds,'Value',1);

handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

end
于 2012-07-15T21:39:50.290 回答