按字母顺序对ListView上的项目进行排序

Boh*_*ohn 2 c# winforms

我有这样的列表视图,在FormLoad事件中,我应该为它做一些初始化,如:(我需要这些).

    listView.Scrollable = true;
    listView.HideSelection = false;
    listView.FullRowSelect = true;
    listView.View = View.Details;
    listView.HeaderStyle = ColumnHeaderStyle.None;
    ColumnHeader header = new ColumnHeader();
    header.Text = "MyHdr";
    header.Name = "MyCol";
    header.Width = listView.ClientSize.Width;
    listView.Columns.Add(header);
Run Code Online (Sandbox Code Playgroud)

我添加项目的方式非常简单:

listView.Items.Add("hello");
listView.Items.Add("How are you");
//... etc
Run Code Online (Sandbox Code Playgroud)

但是我希望它们按字母顺序添加和排序,但是当我向它添加一个新项目并调用Sort方法时,它什么都不做.为什么?!:(

编辑:这是我在调用最后一行的整个部分Sort()目标是有两个列表视图和一个移动按钮,当单击"移动"按钮时,一个列表视图中的选定项应该移动到另一个列表视图.(两个列表视图都不需要排序.只需对AvailLV列表视图进行排序)

private void MoveBtn_Click(object sender, EventArgs e)
{
    ListView source=null;
    ListView target= null;

    if(AvailableLV.SelectedItems.Count>0)
    {
        source = AvailableLV;
        target = SelectedLV;
    }

    if(SelectedLV.SelectedItems.Count>0)
    {
        source = SelectedLV;
        target = AvailableLV;
    }

    if (source != null && target != null)
    {
        HaulItems(source, target);
    }
}

private void HaulItems(ListView source , ListView target)
{
    foreach(ListViewItem item in source.Items)
    {
        if(item.Selected)
        {
            source.Items.Remove(item);
            target.Items.Add(item);
        }
    }
    AvailableLV.Sort();
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*all 6

你在哪里设置ListView.Sorting属性

从上面的链接:

Sorting属性允许您指定是否在ListView控件中对项目进行排序.默认情况下,不执行排序.当Sorting属性设置为Ascending或Descending时,ListView中的项目将按升序字母顺序自动排序(当属性设置为Ascending时)或按字母顺序降序排序(当属性设置为Descending时).您可以使用此属性自动对ListView控件中显示的项目进行排序,以便用户在大量项目可用时更轻松地查找项目.


查看您的编辑,我认为您需要做的就是设置ListView.Sorting属性AvailableLV,它会在添加项目时自动对其进行排序.或者不是打电话.

AvailableLV.Sort(); 
Run Code Online (Sandbox Code Playgroud)

使用

AvailableLV.Sorting = SortOrder.Ascending;
Run Code Online (Sandbox Code Playgroud)