Fueled Fueled - 1 year ago 194
C# Question

How do I align text for a single subitem in a ListView using C#?

I wasn't able to find an answer anywhere about this seemingly simple topic: is it possible to align text of a single subitem in a WinForms ListView control?

If so, how?

I would like to have text in the same column aligned differently.

Answer Source

For future reference, here's how I solved it:

// Make owner-drawn to be able to give different alignments to single subitems
lvResult.OwnerDraw = true;

// Handle DrawSubItem event
private void lvResult_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
    // This is the default text alignment
    TextFormatFlags flags = TextFormatFlags.Left;

    // Align text on the right for the subitems after row 11 in the 
    // first column
    if (e.ColumnIndex == 0 && e.Item.Index > 11)
        flags = TextFormatFlags.Right;


// Handle DrawColumnHeader event
private void lvResult_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    // Draw the column header normally
    e.DrawDefault = true;

It was necessary to handle the DrawColumnHeader, otherwise no text or column separators would be drawn.