似たようなアイテムがたくさん入ったリストビュー(詳細)を作りたいと思います。読みやすくするために、すべての 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)