如何在ListView中解决问题? [英] How to sort things out in ListView?

查看:94
本文介绍了如何在ListView中解决问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

图片-> http://img502.imageshack.us/img502/511/87162943.png

当按字母顺序在每列(问题,答案,类型)上触发Click事件时,如何对所有项目进行排序?

How do I sort all items when the Click event is triggered on each column(Question, answer, type) alphabetically?

推荐答案

好吧,您可以使用DataGrid代替列表框,这会使事情变得更简单, 但无论如何,您也可以自己实施. 这是我曾经在ListView上使用过的东西的一个例子:

Well, you could use a DataGrid instead of a listbox, which would make things simpler, but anyway, you could also implement it yourself. here is an example from something i used once on a ListView:

实现ColumnClick事件:

implement the ColumnClick event:

private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
    {
        // Determine if clicked column is already the column that is being sorted.
        if (e.Column == _lvwItemComparer.SortColumn)
        {
            // Reverse the current sort direction for this column.
            if (_lvwItemComparer.Order == SortOrder.Ascending)
            {
                _lvwItemComparer.Order = SortOrder.Descending;
            }
            else
            {
                _lvwItemComparer.Order = SortOrder.Ascending;
            }
        }
        else
        {
            // Set the column number that is to be sorted; default to ascending.
            _lvwItemComparer.SortColumn = e.Column;
            _lvwItemComparer.Order = SortOrder.Ascending;
        }

        // Perform the sort with these new sort options.
        listView1.Sort();
    }

此方法使用此类进行比较,您可以复制并使用它:

this mathod uses this class for comparing, you can copy it and use it:

public class ListViewItemComparer : IComparer
{
    // Specifies the column to be sorted
    private int ColumnToSort;

    // Specifies the order in which to sort (i.e. 'Ascending').
    private  SortOrder OrderOfSort;

    // Case insensitive comparer object
    private CaseInsensitiveComparer ObjectCompare;

    // Class constructor, initializes various elements
    public ListViewItemComparer()
    {
        // Initialize the column to '0'
        ColumnToSort = 0;

        // Initialize the sort order to 'none'
        OrderOfSort = SortOrder.None;

        // Initialize the CaseInsensitiveComparer object
        ObjectCompare = new CaseInsensitiveComparer();
    }

    // This method is inherited from the IComparer interface.
    // It compares the two objects passed using a case
    // insensitive comparison.
    //
    // x: First object to be compared
    // y: Second object to be compared
    //
    // The result of the comparison. "0" if equal,
    // negative if 'x' is less than 'y' and
    // positive if 'x' is greater than 'y'
    public int Compare(object x, object y)
    {
        int compareResult;
        ListViewItem listviewX, listviewY;

        // Cast the objects to be compared to ListViewItem objects
        listviewX = (ListViewItem)x;
        listviewY = (ListViewItem)y;


        // Determine whether the type being compared is a date type.
        try
        {
            // Parse the two objects passed as a parameter as a DateTime.
            DateTime firstDate  = DateTime.Parse(listviewX.SubItems[ColumnToSort].Text);
            DateTime secondDate = DateTime.Parse(listviewY.SubItems[ColumnToSort].Text);

            // Compare the two dates.
            compareResult = DateTime.Compare(firstDate, secondDate);
        }

        // If neither compared object has a valid date format,
        // perform a Case Insensitive Sort
        catch
        {
            try
            {
                int num1 = int.Parse(listviewX.SubItems[ColumnToSort].Text);
                int num2 = int.Parse(listviewY.SubItems[ColumnToSort].Text);

                // Compare the two dates.
                compareResult = num1.CompareTo(num2);
            }
            catch
            {
               // Case Insensitive Compare
                compareResult = ObjectCompare.Compare(
                listviewX.SubItems[ColumnToSort].Text,
                listviewY.SubItems[ColumnToSort].Text
                );
            }
        }

        // Calculate correct return value based on object comparison
        if (OrderOfSort == SortOrder.Ascending)
        {
            // Ascending sort is selected, return normal result of compare operation
            return compareResult;
        }
        else if (OrderOfSort == SortOrder.Descending)
        {
            // Descending sort is selected, return negative result of compare operation
            return (-compareResult);
        }
        else
        {
            // Return '0' to indicate they are equal
            return 0;
        }
    }  

    // Gets or sets the number of the column to which to
    // apply the sorting operation (Defaults to '0').
    public int SortColumn
    {
        set
        {
            ColumnToSort = value;
        }
        get
        {
            return ColumnToSort;
        }
    }

    // Gets or sets the order of sorting to apply
    // (for example, 'Ascending' or 'Descending').
    public SortOrder Order
    {
        set
        {
            OrderOfSort = value;
        }
        get
        {
            return OrderOfSort;
        }
    }
} 

这篇关于如何在ListView中解决问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆