MFC - Verwendung von CListView REPORT Style



  • Hi Leutz,

    arbeite hier gerade an meiner ersten visuellen C++ Aplikation und bekomme einfach nicht die richtige Ansicht hin. CListView REPORT-Style scheint mir schon das richtige zu sein, doch wie erzeuge ich das. Bisher sieht der nichtfunktionierende Code paritell wie folgt aus (und nicht gleich loslachen 😉 )

    void CMFC_BankView::OnInitialUpdate()
    {
    	CListView::OnInitialUpdate();
    	CListCtrl & ListCtrl = GetListCtrl( );
    	ListCtrl.InsertColumn(0, _T("First Name"), LVCFMT_LEFT, 100);
    	ListCtrl.InsertColumn(1, _T("Last Name"), LVCFMT_LEFT, 100);
    
    	ListCtrl.InsertItem(0,"James");
    	 ListCtrl.InsertItem(1,"Bond");
    
    	 ListCtrl.InsertItem(0,"Mickey");
    	 ListCtrl.InsertItem(1,"Maus");
     ...
    

    Ist natürlich nur ein Ausschnitt. Kann mir mal jemand den Code so zurechtbiegen, dass mir im Hauptfenster diese Zwei Spalten mit den beiden Einträgen angezeigt werden? Mir wäre ein Style ähnlich der rechten Seite im Win-Explorer lieb. Muß ich da noch woanders im Programm Veränderungen vornehmen?

    Danke
    Beste Grüße
    Nukleo



  • Ich kann dir so aus dem Kopf nur bei einem Teil helfen.

    ListCtrl.InsertItem(0,"James");
         ListCtrl.SetItemText(0,1,"Bond");
    
         ListCtrl.InsertItem(1,"Mickey");
         ListCtrl.SetItemText(1,1,"Maus");
    

    Zur Erklärung:
    InsertItem fügt eine neue Zeile mit dem gegebenen Index ein.
    SetItemText legt den Text in den einzelnen Zellen fest.
    (SetItemData könnte für dich noch nützlich sein, wenn das z.B. Datensätze sind, musst du ja deren ID irgendwo speichern.)

    Ich verwende ein anderes Listcontrol, das von dem, was du verwendest abgeleitet ist. Da ist das alles irgendwie viel einfacher. Außerdem ist gleich noch das Sortieren eingebaut.
    Wenn dich das interessiert, schau bei CodeProject mal nach CSortListCtrl. 🙂



  • Hallo!

    Für Report Ansicht solltest du über den Ressourceneditor in die Eigenschaften deiner Listview gehen und unter Formate bei Ansicht auf Bericht/Report umstellen.

    void CMFC_BankView::OnInitialUpdate()
    {
        CListView::OnInitialUpdate();
        //CListCtrl & ListCtrl = GetListCtrl( );
        // erstell doch besser ne Membervariable
        //m_LictCtrl
    
        m_ListCtrl.InsertColumn(0, _T("First Name"), LVCFMT_LEFT, 100);
        m_ListCtrl.InsertColumn(1, _T("Last Name"), LVCFMT_LEFT, 100);
    
        m_ListCtrl.InsertItem(0,"James");
         m_ListCtrl.SetItemText(0,1,"Bond");
    
         m_ListCtrl.InsertItem(1,"Mickey");
         m_ListCtrl.SetItemText(1,1,"Maus");
        // benutz für jede weitere Spalte SetItemText
     ...
    

    Ich hoff dass wird dir helfen.

    Bis denn
    Gruß



  • Danke Euch beiden, für die super schnelle Reaktion

    @Student: Dein Ansatz, geht genau in meine Richtung, doch kommen gleich wieder Fragen auf.

    Ich arbeite mit VS6 also nicht .Net
    Ich hab für meine ListView im Hauptfenster gar keine Ressource vorhanden. Zwar ne Klasse, aber keine Ressource. Alles was ich bislang von Hand da eingetragen habe wurde aber trotzdem mehr oder weniger gut angezeigt. Ich hab also auch nirgens einen Schalter für Bericht/Report gefunden. Ressourcen hab ich nur für selbst erstellte Dialoge.



  • Ich arbeite zur Zeit auch mit VS6 und hab mein Dialog und die ListView über den Ressourceneditor erstellt.
    Da du das ListView aber scheinbar dynamisch erstellst sollte das LVS_REPORT Flag gesetzt sein:
    zB so:

    pmyListCtrl->Create(
       WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,
       CRect(10,10,400,200), pParentWnd, 1);
    

    So solltest du dann auch die Report Ansicht bekommen.

    Im übrigen benutze ich auch wie estartu_de die CSortListCtrl von CodeProject (weil früher oder später will man die Liste ja auch mal sortieren 😉 )

    Gruß



  • Genau, dass war die Zeile die ich gesucht habe. Aber wie gesagt, ich bin noch neu 😉 deshalb noch eine letzte Frage, bevor ich vor Freude in die Luft springe. Wie bekomme ich de pParentWnd ?



  • Damit sollte es gehen:

    pmyListCtrl->Create(
       WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,
       CRect(10,10,400,200), this, 1);
    

    Gruß


Log in to reply