System.Windows.Forms.ListView の SubItem (特定列)だけ色を変える

dotnet winforms forms-listview

下記の前提で、特定の列だけ色を変えたいときの書き方。 ヘッダは別途オーナードローが必要。

VirtualMode = true
View = Details
private void ListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
  if (e.ItemIndex < 0 || e.ItemIndex >= _hogeList.Count)
  {
    e.Item = new ListViewItem(new string[] { "", "", "", "", "", "" });
    return;
  }

  e.Item = new ListViewItem(new string[] {
    "index 0",
    "index 1",
    "index 2",
    "index 3",
    "index 4",
    "index 5",
  });

  if (_isPiyo)
  {
    e.Item.UseItemStyleForSubItems = false;

    // index 3 だけ変更。
    e.Item.SubItems[3].BackColor = Color.Plum;
  }
}