0

似たようなアイテムがたくさん入ったリストビュー(詳細)を作りたいと思います。読みやすくするために、すべての listview.items.count % 2 == 0 行を backolor.lightgray として使用したいと考えています。

このサイトで説明されているように、listviewColumnSorter を作成しました: http://support.microsoft.com/kb/319401

データが使用する必要があるものと「似ている」ように見えるように、いくつかの変更を加えた後、コードは次のようになります。

public partial class Form1 : Form
{
    private ListViewColumnSorter lvwColumnSorter;

    public Form1()
    {
        InitializeComponent();
        lvwColumnSorter = new ListViewColumnSorter();
        this.listView1.ListViewItemSorter = lvwColumnSorter;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        ColumnHeader columnheader;      // Used for creating column headers.
        ListViewItem listviewitem;      // Used for creating listview items.

        // Ensure that the view is set to show details.
        listView1.View = View.Details;

        for (int i = 0; i < 10; i++)
        {
            listviewitem = new ListViewItem("item" + i.ToString());
            if (listView1.Items.Count % 2 == 0)
            {
                listviewitem.BackColor = Color.LightGray;
                listviewitem.SubItems.Add("xxx");
            }
            else
                listviewitem.SubItems.Add("yyy");
            this.listView1.Items.Add(listviewitem);
        }

        // Create some column headers for the data. 
        columnheader = new ColumnHeader();
        columnheader.Text = "First Name";
        this.listView1.Columns.Add(columnheader);

        columnheader = new ColumnHeader();
        columnheader.Text = "Last Name";
        this.listView1.Columns.Add(columnheader);

        // Loop through and size each column header to fit the column header text.
        foreach (ColumnHeader ch in this.listView1.Columns)
        {
            ch.Width = -2;
        }
    }

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

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

(+ msdn サイトの ListViewColumnsSorter クラス。)

2 番目の列 (姓) を並べ替えると、すべての xxx 列が灰色で yyy が白であることがわかります。色はデータにバインドされているように見えるため、2 番目の列ごとに灰色にするという私の当初の考えは、今では台無しにされた。

どういうわけかソート機能を維持し、データから独立して常に 2 行おきに灰色にすることはできますか?

写真:

ここに画像の説明を入力

したがって、完全に明確にするために、任意の列でソートした後、2 行ごとにライトグレーを保持したいと思います。これを達成する方法は?

(.net 4)

4

1 に答える 1

1

これはとても典型的です。これを投稿する2時間前にググって試してみたところ、10分後に答えが見つかりました...

ListView C#(.Net 3.5)の代替色?

追加するだけ

recolorListItems(listView1);

listview1_columnClick 関数の最後まで。どこ:

private static void recolorListItems(ListView lv)
    {
        for (int ix = 0; ix < lv.Items.Count; ++ix)
        {
            var item = lv.Items[ix];
            item.BackColor = (ix % 2 == 0) ? Color.LightGray : Color.White;
        }
    }

これらの余分な投稿で申し訳ありません

于 2012-10-28T09:24:02.017 に答える