Share via


SYSK 109: Is it possible to change the ForeColor of a SubItem in a ListView?

The other day I came across the question above at http://www.codecomments.com/archive293-2004-7-244806.html, which did not provide the way to accomplish the desired effect.  The answer is – yes, you can.  Here is how you might go above doing it in .NET 2.0 (key lines of code in bold):

 

public class Employee

{

    private string _name;

    private int _id;

    private string _department;

    public Employee(string name, int id, string department)

    {

        _name = name;

        _id = id;

        _department = department;

    }

    public string Name

    {

        get { return _name; }

    }

    public int ID

    {

        get { return _id; }

    }

    public string Department

    {

        get { return _department; }

    }

    public string[] Data

    {

        get { return new string[] { _name, _id.ToString(), _department }; }

    }

}

public partial class Form1 : Form

{

    public Form1()

    {

        InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)

    {

    Employee e1 = new Employee("Irena Kennedy", 12345, "IT");

    Employee e2 = new Employee("Mike Smith", 23456, "Sales");

    this.listView1.Columns.Add("Name");

    this.listView1.Columns.Add("ID");

    this.listView1.Columns.Add("Department");

    this.listView1.View = View.Details;

    this.listView1.Items.Add(new ListViewItem(e1.Data));

    this.listView1.Items.Add(new ListViewItem(e2.Data));

    this.listView1.OwnerDraw = true;

    this.listView1.DrawItem += new DrawListViewItemEventHandler(listView1_DrawItem);

    this.listView1.DrawColumnHeader += new DrawListViewColumnHeaderEventHandler(listView1_DrawColumnHeader);

    this.listView1.DrawSubItem += new DrawListViewSubItemEventHandler(listView1_DrawSubItem);

    }

    private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)

    {

        e.DrawDefault = false;

    }

    private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)

  {

        e.DrawDefault = true;

    }

    private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)

    {

        if (e.ColumnIndex == 2)

        {

            if (e.SubItem.Text == "IT")

                e.SubItem.ForeColor = Color.Red;

        }

    }

}