2

私はこのようなリストビューを持っており、 FormLoad イベントでは、次のような初期化を行う必要があります: ( I need these ) 。

    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);

それにアイテムを追加する方法は、次のように非常に簡単です。

listView.Items.Add("hello");
listView.Items.Add("How are you");
//... etc

しかし、それらを追加してアルファベット順にソートしたいのですが、新しいアイテムを追加してSortメソッドを呼び出すと、何もしません。どうして?!:(

EDIT:これは、最後の行でSort()を呼び出しているセクション全体です。目標は、2つのリストビューと、移動ボタンをクリックすると、1つのリストビューから選択されたアイテムが別のリストビューに移動する必要がある移動ボタンを持つことです. (両方のリストビューをソートする必要はありません。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();
}
4

4 に答える 4

6

ListView.Sorting プロパティをどこで設定していますか

上記のリンクから:

Sorting プロパティを使用すると、ListView コントロールで項目を並べ替えるかどうかを指定できます。デフォルトでは、ソートは実行されません。Sorting プロパティが Ascending または Descending に設定されている場合、ListView 内の項目は、アルファベットの昇順 (プロパティが Ascending に設定されている場合) またはアルファベットの降順 (プロパティが Descending に設定されている場合) で自動的に並べ替えられます。このプロパティを使用して、ListView コントロールに表示される項目を自動的に並べ替えて、多数の項目が使用可能な場合にユーザーが項目を見つけやすくすることができます。


あなたの編集を見ると、ListView.Sortingプロパティをオンに設定するだけAvailableLVで、アイテムが追加されると自動的に並べ替えられると思います。または呼び出す代わりに。

AvailableLV.Sort(); 

使用する

AvailableLV.Sorting = SortOrder.Ascending;
于 2012-05-28T03:34:23.400 に答える
1

誰かがこのトピックに注意を払っている場合、リストビューをデータテーブルに送信し、そこからデータビューを作成してからデータビューをソートするのが最も簡単な方法であることがわかりました。そのデータビューが並べ替えられたら、一時テーブルを作成し、行をリストビューに戻します。以下の例。

    public string SortOrder;
    public string ItemSorted;
    private void LSTHistory_ColumnClick(object sender, ColumnClickEventArgs e)
    {
        DataTable TempTable = new DataTable();
        for (int i = 0; i < LSTHistory.Columns.Count; i++)
        {
            TempTable.Columns.Add(LSTHistory.Columns[i].Text);
        }
        foreach (ListViewItem Item in LSTHistory.Items)
        {
            DataRow iRow = TempTable.NewRow();
            iRow[0] = Item.Text;
            iRow[1] = Item.SubItems[1].Text;
            TempTable.Rows.Add(iRow);
        }
        if (SortOrder == string.Empty || SortOrder == "ASC") SortOrder = "DESC";
        else SortOrder = "ASC";
        if (e.Column == COLTime.Index)
        {
            ItemSorted = COLTime.Text;
        }
        else
        {
            ItemSorted = COLURL.Text;
        }
        DataView OldView = TempTable.DefaultView;
        OldView.Sort = ItemSorted + " " + SortOrder;
        DataTable SortedTable = OldView.ToTable();
        LSTHistory.Items.Clear();
        foreach (DataRow iRow in SortedTable.Rows)
        {
            LSTHistory.Items.Add(iRow[0].ToString()).SubItems.Add(iRow[1].ToString());
        }
    }
于 2014-07-02T18:30:01.143 に答える