Dialog mit Liste aktualisieren



  • Danke Dir nochmals,

    mmhhh, da komme ich jetzt aber nicht ganz mit.

    Mein Gedanke ist,

    Der Dialog wird aufgerufen:

    BOOL CServerDialog::OnInitDialog()
    

    im Dialog wir die Funktion aufgerufen, die die Datenbank liest und in einen entsprechenden Vector schreibt:

    if(!m_cServerliste.SchreibeServerAusDatenbank())
    

    Danach wird die Liste geschrieben in der der Inhalt des Vectors gezeigt wird:

    CListBox* pLB = (CListBox*) GetDlgItem(IDC_LISTSERVER);
        for(int i= 0; i != m_cServerliste.size(); i++)
        {
            pLB->AddString(m_cServerliste[i].getServername().c_str());
        }
    

    Jetzt habe ich im Dialog ein Button, der beim aufruf die Funktion aufruft in der ein Insert auf die Datenbank gemacht wird (neuen Server anlegen:

    void CServerDialog::OnNewserver() 
    {
    	UpdateData(TRUE);
    	Datenbank.fInsertNewServer();	
    	UpdateData(FALSE);	
    }
    

    Und jetzt möchte ich, dass wieder der Dialog neu gezeichnet wird , in dem die Liste wieder neu geschrieben wird.
    Wie mache ich dass ??
    Es handelt sich nur um ca. max. 10 Einträge...

    Gruß
    andy_mann



  • Öhm hab dir doch einen Vorschlag gemacht!!!
    Du erstellst dir eine neue Funktion, löschst alle Werte aus der Listbox und schreibst alle aus dem Vektor wieder rein, oder weisst du nicht so ganz wie man eine neue Funktion schreibt?

    *winke*
    Hellsgore



  • devil81 schrieb:

    Du musst
    a) Das neue Element in den Vector eintragen,
    b) das gleiche in der Datenbank tun,
    c) das gleiche in der Listbox tun.

    Sollen wir es dir vorkauen ?
    Und wenn es 10 Werte sind, für was brauchst du dann eine Datenbank ???

    Devil



  • Danke euch,

    Jetzt Funktioniert es...

    Gruß
    andy_mann



  • Jetzt muß ich dennoch noch mal fragen,

    ich führe für jeden Eintrag eine ID mit.

    Wenn ich jetzt die elegante lösung nehmen möchte und nur den entsprechenden Eintrag ändern möchte, muß ich mir ja einen wert merken.

    Wie mache ich dass.
    Muß ich mir bei jedem Durchlauf zb. die ID des Servers in eine seperate Variable speichzern ??

    Gruß
    andy_mann



  • Bsp. von mir wie man es lösen könnte:

    CListBox* pList = (CListBox*) GetDlgItem(IDC_LISTSERVER);
    
    int iPos = 0;
    if ((iPos = pList->FindString("Dein neuer Satz")) != -1)
    {
    	//Wenn was gefunden dann ändere den Satz
    	pList->DeleteString(iPos);
    	pList->InsertString(iPos, "Dein neuer Satz");
    }
    else
    {
    	//Wenn nix gefunden dann füge ein
             pList->AddString("Dein neuer Satz")
    }
    

    Dann wendest du das an, wenn du ein neuer Satz eingefügt wird oder ein neuer Satz hinzu gefügt werden soll. Das solltest du dann aber für deine Ansprüche umschreiben. Weiss auch nicht ob das funzt 😃 einfach mal testen... Soll ja nur dazu dienen dir einen Hinweis zu geben.

    *winke*
    Hellsgore



  • Hi!

    Nutze statt der ListBox ein ListCtrl, dann kannst du die ID mittels SetItemData() speichern. Und das Auffinden per ID ist nach dem Sortieren auch einfach. 😉

    Gruß A.K.



  • Andreas Kapust schrieb:

    Hi!

    Nutze statt der ListBox ein ListCtrl, dann kannst du die ID mittels SetItemData() speichern. Und das Auffinden per ID ist nach dem Sortieren auch einfach. 😉

    Gruß A.K.

    Wenn er nur eine Spalte hat, tuts ne Listbox auch.
    Wenn du die elemente so wie sie im Vector stehen, in die Listbox schreibst,
    sie dort nicht sortierst, dann sind die positionen der elemente in der Listbox
    identisch mit dem Vector. Jetzt musst du nur noch rausfinden welches Element
    in der Listbox selektiert wurde, dann kannst du es darüber im vector finden.

    Eleganter ist natürlich CListCtrl 😉
    Da könnte man noch checkboxen reinmachen, welches die Usability wohl vereinfachen würde...

    Devil



  • Vielen Dank für die vielen Ratschläge,

    ich habe dies jetzt mit der CListBox realisiert und scheint auch zu funzen.

    Wenn ich jetzt dennoch auf die CListCtrl umsteigen möchte, muß ich einfach aus der CListBox ein CListCtrl machen ??

    Im MFC-Klassenassisten finde ich nichts darüber.

    Gruß
    andy_mann



  • Schau mal in die FAQ. 🙄
    Oder suche nach CListCtrl.

    Es ist ein eigenes Steuerelement, findet sich aber auch
    im Dialogeditor.

    Devil


Anmelden zum Antworten