Dialog updaten??



  • Hallo an alle!!

    Nachdem ich schon auf Seite 78 des MFC Forums gelangt war, habe ich entschlossen, doch mal nachzufragen...
    Also.. ich habe eine Dialogfeldbasierte Anwendendung, in der sich eine Listbox befindet, die mit Daten aus einer Datenbank gefüllt werden.
    Nun hat der user die Möglichkeit, auf solch einen Datensatz in einer Zeile in der Liste zu klicken. Daraufhin öffnet sich ein neues dialogfenster, in dem er den Datensatz aktualisieren kann, d.h. in der Datenbank überschreibt...
    Mein Problem dabei ist allerdings, dass wenn ich den zweiten Dialog nach dem aktualisieren schließe ja immer noch die alten Daten in der Listbox stehen. Ich habe in der Klasse des ersten Dialogs zwar eine Update Methode, diese kann aber nicht in der zweiten Dialoganwendung verwendet werden.
    Auf die Listbox selber kann ich ja auch nicht zugreifen, da es sich ja um eine andere Klasse handelt.
    Ich habe es folgendermaßen in der Methode des Ändern Buttons des zweiten Dialogs versucht:

    CErsterDlg *First = (CErsterDlg*) GetDlgItem(IDD_ERSTER_DIALOG);
    
            First->Update();
            }*/
    

    Leider stürtzt er immer nach dem Speichen ab... Welche Möglichkeit habe ich, das noch im Hintergrund befindliche Dialoganwendung zu updaten mittels der zweiten Dialogklasse? Oder irgenwelche anderen Ideen?? Ich wäre wirklich für alles dankbar, ich hoffe ich konnte mein Problem "rüberbringen"

    Liebe Grüße

    Tina



  • Ich geh einfach mal davon aus das du Modale Dialogfelder verwendest da kanste prüfen ob geupdatet werden soll oder nicht. Mal ein Beispiel ich hab en dialog mit nem eingabe feld wenn ich auf Update Butoon klicke öffnet sich ein neuer in den ich etwas eingeben kann nach dem ich im neuen Dialog auf OK geklickt habe stehts im eingabe feld des alten und das geht so einfach

    // Funktion Update wird aufgerufen durch klick auf button

    if(m_dlgUpdate.DoModal() == IDOK)
    {
    m_strEingabefeld = m_strNewName;
    UpdateData(FALSE);
    }

    m_strEigabefeld ist der CString der 1. Dialogfeldklasse. m_strNewName ist der CString der 2. Dialogfeld klasse



  • Hmm, das ist nicht so ganz das was ich meine...

    Wenn ich auf "Ändern" im zweiten dialogfeld, nennen wir es "Datensatz ändern" klicke, wird der Datensatz in der Datenbank geändert und der Dialog "Datensatz ändern" wird geschlossen. Nun möchte ich natürlich im ersten Fenster, sagen wir "Datensätze anzeigen", die Listbox updaten, so dass auch der neue Datensatz angeziegt wird. Hierfür würde eine Update Funktion aufgerufen, die die Items aus der Datenbank holt und dann neu in die Listbox schreibt...
    Es geht also nicht so, wie du es vorgeschlagen hast..
    Ich dachte eigentlich es würde mit einem Zeiger auf den Dialog funktionieren, aber dabei gibt es immer einen absturz...

    Noch Ideen???



  • Hi,
    im folgenden Beispiel ist dlgTest eine Variable der Klasse des 2. Dialogfeldes. Die Schaltfläche für "Daten übernehmen" im 2. Dialogfeld hat die ID: IDOK

    // dahin, wo das 2. Dialogfeld gestartet werden soll
    if(dlgTest.DoModal() == IDOK)
    {
      // Daten sollen übernommen werden
    
      // ... hier kommt der Code zum Daten übernehmen hin. z.B. Übernahme des Strings m_sDatensatzname aus dem 2. Dialogfeld, den der Benutzer dort geändert hat.
      m_ctrlListBox.AddString(dlgTest.m_sDatensatzname);
      // ... u.s.w.
    }
    

    Ich deklariere eine globale Variable der Klasse des 2. Dialogfeldes. Dann starte ich über diese das 2. Dialogfeld und nach beendigung teste ich, ob es mit "Datensatz ändern" beendet wurde. Falls ja, füge ich die immer noch in der Klasse vorhandenen Daten in meine Listbox ein.

    So, ich hoffe das hat dir geholfen.

    mfg TakeItEasy!


Anmelden zum Antworten