WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

checkboxes und editierbare Zellen in uitable

 

Negahtiev

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2011, 11:13     Titel: checkboxes und editierbare Zellen in uitable
  Antworten mit Zitat      
Hallo Matlab Freunde,

erst einmal vielen Dank an dieses Forum. Hier hab ich in den letzten Wochen viele nützliche Informationen finden können.
Nun habe ich aber ein Problem bei dem ich mich ein wenig verzettelt habe.
Ich arbeite gerade an einer GUI mit der Matlab 2010b unter XP und habe mir hierbei eine Tabelle erstellt mit uitable in GUIDE.
Funktioniert auch alles wunderbar.
Die Tabelle hat unterschiedliche viele Zeilen, je nachdem wieviel eingetragen wurden. Die ersten 10 Spalten sind mit Werten gefüllt.
In das figure der Tabelle habe ich in die 11. Spalte checkboxen über den Table Property Editor mit Format logical eingefügt und noch eine weitere Spalte die Editierbar sein soll.

Was will ich machen: Wenn kein Häckchen gesetzt ist, werden die Werte aus der Spalte 10 zusammen addiert und in ein statictext-Feld ausgegeben. Wenn doch ein Häckchen gesetzt wurde, wird der eingetragene Wert in der Zeile in der Spalte 12, statt dem aus der Spalte 10 verwendet. Das soll im Grunde für jede Zeile funktionieren. Probiert hab ich es schon mal mit einer for-Schleife um jede Zeile zu checken.
Auch eine checkeditcallback habe ich eingefügt. Jedoch komm ich zum einen nicht mit den cells klar und zum anderen weiß ich nicht recht weiter.

Hier einmal meine bisherigen Überlegungen für das celleditcallback:

Code:
%
function uitable1_CellEditCallback(hObject, eventdata, handles)
% hObject    handle to uitable1 (see GCBO)
% eventdata  structure with the following fields (see UITABLE)
%   Indices: row and column indices of the cell(s) edited
%   PreviousData: previous data for the cell(s) edited
%   EditData: string(s) entered by the user
%   NewData: EditData or its converted form set on the Data property. Empty if Data was not changed
%   Error: error string when failed to convert EditData to appropriate value for Data
% handles    structure with handles and user data (see GUIDATA)

Tabelle=get(handles.uitable1,'Data');
Zuordnung=Tabelle(:,11);

for Flst=1:size(Zuordnung)
    Zeile2=Zuordnung(Flst,1);

    if strcmp(Tabelle_neu1(:,11), 1)
 
        Summe_1_12=sum(str2double(Tabelle(:,12)));
        set(handles.Summe_1_12,'String',Summe_1_12);
       
    else
       
        Summe_1_12=sum(str2double(Tabelle(:,9)));
        set(handles.Summe_1_12,'String',Summe_1_12);
    end;    
end;
guidata(hObject,handles)
 



MeinProblem ist nun, dass ich keine Häckchen bekomme, wenn ich die Checkboxen anklicke und die Werte in den editibaren Feldern verschwinden nach dem eintragen.

Ich muss ehrlich gestehen, ich weiß nicht ob ich völlig auf dem Holzweg bin. Bin noch Anfänger und bitte um, wenn es nicht zu große Umstände macht, etwas ausführlichere Erklärungen bzw. Hinweise.

Vielen Dank schon einmal

Gruß Negahtiev


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.06.2011, 20:50     Titel: Re: checkboxes und editierbare Zellen in uitable
  Antworten mit Zitat      
Hallo Negahtiev,

Ich verstehe ein paar Dinge in Deinem Code nicht:
Code:

for Flst = 1:size(Zuordnung)
% size(Zuordnung) ist ein Vektor! Wahrscheinlich meinst Du:
for Flst = 1:length(Zuordnung)

    Zeile2=Zuordnung(Flst,1);
    % Zeile2 taucht nirgends mehr auf ??

    if strcmp(Tabelle_neu1(:,11), 1)
    % STRCMP vergleicht Strings. 1 ist aber eine Zahl.
    % Dann gibt STRCMP immer FALSE zurück...
 

Vielleicht hilft das ja schon weiter.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Negahtiev

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2011, 07:20     Titel:
  Antworten mit Zitat      
Hallo Jan S,

vielen Dank erst einmal für die Antwort.
Das mit dem length für den Vektor habe ich übernommen.
Nur bei dem strcmp habe ich nicht recht eine Idee, wie ich die Zelle in der Tabelle vergleichen soll. Hab es stattdessen mit true probiert. Habe aber immer noch das gleiche Verhalten wie vorher. Häckchen lassen sich nicht setzen und editierbare Felder bleiben leer.

Dazu ist mir noch aufgefallen, dass ich doch eigentlich erst einmal noch diese Spalte mit den logical zu den Data der uitable hinzufügen müsste, oder? Wenn ja wie mach ich das dann? Oder reicht es, dass in dem figure diese Spalte eingefügt wurde?

Gruß Negahtiev
 
Negahtiev

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2011, 08:57     Titel:
  Antworten mit Zitat      
Hallo ich nochmal,

also ich hab jetzt noch ein bisschen rumgefrickelt. Bin zwar schon ein wenig weiter, aber funktionieren tut es noch nicht.

Code:
%

function uitable1_CellEditCallback(hObject, eventdata, handles)

Tabelle_neu1=get(handles.uitable1,'Data');
Zuordnung=Tabelle_neu1(:,11);

for Flst=1:length(Zuordnung)    

    if Tabelle_neu1{Flst,11}==1
        Wert(Flst,1)=str2double(Tabelle_neu1(Flst,12));
               
    else
        Wert(Flst,1)=str2double(Tabelle_neu1(Flst,10));
       
    end;
end;
Summe_1_12=sum(Wert(:,1));

set(handles.Summe_1_12,'String',Summe_1_12);

guidata(hObject,handles)
 


So wie ich das sehe, muss ich tatsächlich noch vorher die Spalten 11 und 12 definieren oder eintragen. Und außerdem muss ich es noch irgendwie hinbekommen, dass die Eingabe des Users abgewartet wird.
 
Negahtiev

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2011, 14:58     Titel:
  Antworten mit Zitat      
So die editierbaren Zellen hab ich dann jetzt hinbekommen. Es lassen sich jetzt Werte eintragen und diese bleiben auch bestehen.
Bleibt jetzt nur das Problem, dass die checkboxen nicht ausgefüllt werden können.
Ich hab es mal nochmal als Dateien angefügt, damit man es vlt. besser versteht. Habt Nachsicht, wenn es nicht die sauberste Art der Umsetzung ist, bin wie gesagt Anfänger. Und für jede Vereinfachung dankbar.

Wirtschaftlichkeit_3.m
 Beschreibung:

Download
 Dateiname:  Wirtschaftlichkeit_3.m
 Dateigröße:  13.93 KB
 Heruntergeladen:  420 mal
Wirtschaftlichkeit_3.fig
 Beschreibung:

Download
 Dateiname:  Wirtschaftlichkeit_3.fig
 Dateigröße:  6.45 KB
 Heruntergeladen:  376 mal
 
Negahtiev

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2011, 07:56     Titel:
  Antworten mit Zitat      
So Problem gelöst. Neben ein paar Änderungen in der Celleditcallback, waren auch die übergebenen Werte in der Tabelle nicht ganz so einfach zu bearbeiten... Das mit chars so nicht einfach gerechnet werden kann...

Für alle die es interessiert hier dann noch mal eine funktionierende Celleditcallback:

Code:
%

function uitable1_CellEditCallback(hObject, eventdata, handles)

Tabelle_neu1=get(hObject,'Data');

Zuordnung=Tabelle_neu1(:,11);

for Flst=1:length(Zuordnung)    

    if Tabelle_neu1{Flst,11}==1
        Wert(Flst,1)=Tabelle_neu1(Flst,12);
        Wert(Flst,2)=Tabelle_neu1(Flst,13);
       
    else
        Wert(Flst,1)=Tabelle_neu1(Flst,9);
        Wert(Flst,2)=Tabelle_neu1(Flst,10);
       
    end;
end;
Wertsumme1=sum(cat(3,Wert{:,1}), 3);
Wertsumme2=sum(cat(3,Wert{:,2}), 3);

Summe_1_12=Wertsumme1;
Summe_13_20=Wertsumme2;

set(handles.Summe_1_12,'String',Summe_1_12);
set(handles.Summe_13_20,'String',Summe_13_20);

guidata(hObject,handles)
 
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.