Announcement

Collapse
No announcement yet.

ListViewItem sortieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ListViewItem sortieren

    Hallo,

    Ich möchte Daten die in einem ListViewItem dargestellt werden auf- bzw. absteigend sortieren lassen, nachdem man die "Spaltenüberschrift" (Ich wisst was ich meine ) angeklickt hat. Gibts da ne' einfache Möglichkeit zu?

    Gruß,

    Timo Schröter

  • #2
    Hallo,

    im ListView-Element gibt es die Sorting-Eigenschaft.

    <PRE>
    private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
    {
    if (listView1.Sorting == SortOrder.Ascending)
    {
    listView1.Sorting = SortOrder.Descending;
    }
    else
    {
    listView1.Sorting = SortOrder.Ascending;
    }
    }
    </PRE>

    Gruß
    Christian Pösch

    Comment


    • #3
      Hallo,

      klingt einleuchtet, funktioniert bei mir aber nicht wirklich. Meine Columns leg ich erst zur Laufzeit an, hat es evtl etwas damit zu tun?
      Ansonsten passiert einfach nichts, wenn ich draufdrücke. Vorsichtshalber hab ich direkt nach dem Anlegen ein

      lv1.Sorting = SortOrder.Descending;

      eingefügt, was auch zu funktionieren scheint. Aber selbst danach klappt der Klick nicht

      Gruß,

      Tim

      Comment


      • #4
        Hallo,

        ich habe es gerade mal versucht, indem ich in den Eigenschaften

        ListView.Sorting = SortOrder.Descending;

        gesetzt habe. Anschliessend funktionierte die Sortierung bei mir auch nicht mehr.

        Ich würde mal versuchen, beim Anlegen die Eigenschaft

        lv1.Sorting = SortOrder.None;

        zu setzen.

        Gruß
        Christian Pösch

        Comment


        • #5
          Hallo,

          hab ich gemacht, ist aber auch die Standarteinstellung, wie ich gesehen habe. Nur tut sich bei mir nichts . Ich kann die Columns anklicken, aber nichts passiert.

          Komisch...

          Gruß,

          Timo Schröte

          Comment


          • #6
            Hallo,

            also ich habe jetzt mal die Erstellung zur Laufzeit nachgebaut und so funktioniert es auch. Am EventHandler kann es nicht liegen, oder?

            <PRE>
            private void Form1_Load(object sender, System.EventArgs e)
            {
            ListView listView_test = new ListView();
            listView_test.View = View.Details;
            listView_test.Columns.Add("Col1",100,HorizontalAli gnment.Left);
            listView_test.Columns.Add("Col2",100,HorizontalAli gnment.Left);
            listView_test.Columns.Add("Col3",100,HorizontalAli gnment.Left);
            listView_test.Size = new Size(320,200);
            listView_test.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this. listView_test_ColumnClick);
            for (int i = 0;i < 10;i++)
            {
            listView_test.Items.Add("Item "+i.ToString());
            listView_test.Items[i].SubItems.Add(String.Format("SubItem {0}.1",i));
            listView_test.Items[i].SubItems.Add(String.Format("SubItem {0}.2",i));
            }
            this.Controls.Add(listView_test);
            }

            private void listView_test_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
            {
            if ((sender as ListView).Sorting == SortOrder.Ascending)
            {
            (sender as ListView).Sorting = SortOrder.Descending;
            }
            else
            {
            (sender as ListView).Sorting = SortOrder.Ascending;
            }
            }
            </PRE>

            Gruß

            Christian Pösch

            Comment


            • #7
              Ehm... *räusper*... doch.

              Funktioniert, aber wie bekomme ich es hin, das er nicht nur nach der 1. Spalte dortiert, sondern nach der, auf die ich klicke?

              Comment


              • #8
                Hallo,

                da wird's dann schon etwas aufwändiger.

                <PRE>
                private void listView_test_ColumnClick(object sender, ColumnClickEventArgs e)
                {
                (sender as ListView).ListViewItemSorter = new ListViewItemComparer(e.Column);
                (sender as ListView).Sort();
                }

                class ListViewItemComparer : IComparer
                {
                private int col;
                public ListViewItemComparer()
                {
                col=0;
                }
                public ListViewItemComparer(int column)
                {
                col=column;
                }
                public int Compare(object x, object y)
                {
                return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
                }
                }
                </PRE&gt

                Comment

                Working...
                X