Mehrere ListViews verwalten



  • hallo,

    ich habe mein windows form in zwei bereiche aufgeteilt. auf der linken ist ein TreeView, mit nur einem root und mehreren nodes. auf der rechten seite wird je nachdem welcher node geklickt wird ein anderes ListView angezeigt. die einzelnen nodes zu selektieren war ja kein großes problem.

    die einzelnen trees und views habe ich als private member in der klasse Form, welche von der visual umgebung automatisch generiert worden ist. den aktuellen TreeNode und ListView merke ich mir.

    aber mein problem ist jetzt das ich keine ahnung habe wie ich mit den einzelnen views umzugeben habe! in den views möchte ich gerne listen anzeigen, z.b.: liste 1 enthält kunden, liste 2 enthält artikel, liste 3 enthält ladenlokale



  • Beschreib mal das Problem , das wird hier nicht klar.

    Generell hast Du doch Abhängig von den Selektierten daten des TreeView verschiedene Daten für die Listview.

    Bei einem SelectChange eregnis der TV leerst Du die LV (Items.Clear()) und setzt neue Daten ein.

    (Eventuell wäre zu überlegen ob Du das LV nicht wegwirfst und eine weitere Ebene in der TV einsetzt.)



  • in den views möchte ich gerne listen anzeigen, z.b.: liste 1 enthält kunden, liste 2 enthält artikel, liste 3 enthält ladenlokale...

    ich weiß nicht wie ich das umsetzen soll, also wie ich mit den einzelnen views umzugehen habe. im moment sieht das so aus:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace xSchedular
    {
        public partial class xSchedular : Form
        {
            private TreeNode currentTreeNode;
            private TreeNode rootTreeNode;
            private TreeNode[] childTreeNode;
            private ListView currentListView;
            private ListView rootListView;
            private ListView[] childListView;
            private int currentIndex;
    
            public xSchedular()
            {
                InitializeComponent();
    
                currentIndex = 0;
    
                childTreeNode = new TreeNode[3];
                childTreeNode[0] = new TreeNode("child 1");
                childTreeNode[1] = new TreeNode("child 2");
                childTreeNode[2] = new TreeNode("chidl 3");
    
                rootTreeNode = new TreeNode("parent", childTreeNode);
                treeView1.Nodes.Add(rootTreeNode);
                treeView1.Select();
    
                rootListView = new ListView();
                childListView = new ListView[3];
                childListView[0] = new ListView();
                childListView[1] = new ListView();
                childListView[2] = new ListView();
    
                rootListView.Parent = splitContainer1.Panel2;
                childListView[0].Parent = splitContainer1.Panel2;
                childListView[1].Parent = splitContainer1.Panel2;
                childListView[2].Parent = splitContainer1.Panel2;
    
                rootListView.Dock = DockStyle.Fill;
                childListView[0].Dock = DockStyle.Fill;
                childListView[1].Dock = DockStyle.Fill;
                childListView[2].Dock = DockStyle.Fill;
    
                currentListView = rootListView;
                currentTreeNode = rootTreeNode;
    
                rootListView.Show();
                childListView[0].Hide();
                childListView[1].Hide();
                childListView[2].Hide();
    
                treeView1.ExpandAll();
    
                rootListView.View = View.List;
                childListView[0].View = View.List;
                childListView[1].View = View.List;
                childListView[2].View = View.List;
    
                rootListView.Items.Add("rootListView");
                childListView[0].Items.Add("childListView[0]");
                childListView[1].Items.Add("childListView[1]");
                childListView[2].Items.Add("childListView[2]");
            }
    
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                if (e.Node.Parent == null)
                {
                    if (!currentListView.Equals(rootListView))
                    {
                        currentIndex = 0;
                        currentListView.Hide();
                        currentListView = rootListView;
                        currentListView.Show();
                    }
                }
                else
                {
                    if( !currentListView.Equals( childListView[e.Node.Index]))
                    {
                        currentIndex = e.Node.Index + 1;
                        currentListView.Hide();
                        currentListView = childListView[e.Node.Index];
                        currentListView.Show();
                    }
                }
            }
        }
    }
    


  • Ähm, sorry - ich hab mal wieder ListView und ListBox durcheinander gewürfelt. Hab mit den VIEWS keinerlei Erfahrung - aber hab ein klein wenig Geduld, gibt hier einige die sich intensiev mit beschäftigt haben 🤡

    Noch mals sry, ich fall immer wieder drauf rein ;o)



  • kein problem - aber zurück zu meinem problem 🙂 - mir geht es darum wie ich später auf die elemente in der listview am saubersten zugreifen kann:

    // möglichkeit 1
    myViews[currentViews].machWas(...)
    
    //möglichkeit 2
    currentView.machWas(...)
    

    ist das so überhaupt möglich oder gäbe es eine "bessere" lösung? ich finde meinen ansatz echt nicht sooo dolle. könnte ich dann nicht besser von den einzelnen views neue klassen ableiten?!? und je nachdem welche ansicht angeklickt worden ist dem currentView den neuen typen zuweisen?

    class MyView0 : ListView
    class MyView1 : ListView
    class MyView2 : ListView
    
    switch( myTreeNode.Index)
    {
        case 1:
            currentView = My1View;
            break;
        case 2:
            currentView = My2View;
            break;
        default:
            currentView = My0View;
    }
    

    und diese klassen könnte ich dann so bearbeiten wie ich "möchte" ? ...würde das so funktionieren**????**



  • hallo,

    ich habe gerade zu dem projekt eine neue klasse hinzugefügt:

    class RootListView : ListView
    

    gefällt mir jetzt schon viel besser, ABER: kann die visual studio umgebung das nicht für einen übernehmen? also das ich der ListView über den designer wie bei meiner Form arbeiten kann? ...dem projket eine klasse hinzufügen -> ableiten von ListView**?**


Anmelden zum Antworten