关于排序:如何在.NET ListView中设置标题排序字形?

关于排序:如何在.NET ListView中设置标题排序字形?

How to set the header sort glyph in a .NET ListView?

如何在.NET 2.0 WinForms ListView中设置具有标题排序字形及其方向的列?

磕碰

listview是.net不是托管控件,它是围绕Win32 ListView通用控件的非常薄的包装器。它甚至不是一个很好的包装器-它没有公开真实列表视图的所有功能。

Win32 listview公共控件支持使用主题进行绘制。主题元素之一是标题排序箭头。 Windows资源管理器的listview公共控件知道如何使用该主题元素绘制其列之一。

  • Win32 listview是否支持指定哪个列具有什么排序顺序?
  • listview内部使用的Win32标头控件是否支持指定哪个列具有什么排序顺序?
  • win32标头控件是否支持自定义绘图,因此我可以自己绘制标头排序字形?
  • win32 listview控件是否支持自定义标题绘图,因此我可以自己绘制标题排序字形?
  • .NET ListView控件是否支持自定义标头绘制,因此我可以自己绘制标头排序字形?

如果有人需要快速解决方案(它在列标题文本的开头绘制向上/向下箭头):

ListViewExtensions.cs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static class ListViewExtensions
{
    public static void DrawSortArrow(this ListView listView, SortOrder sortOrder, int colIndex)
    {
        string upArrow ="▲  ";
        string downArrow ="▼  ";

        foreach (ColumnHeader ch in listView.Columns)
        {
            if (ch.Text.Contains(upArrow))
                ch.Text = ch.Text.Replace(upArrow, string.Empty);
            else if (ch.Text.Contains(downArrow))
                ch.Text = ch.Text.Replace(downArrow, string.Empty);
        }

        if (sortOrder == SortOrder.Ascending)
            listView.Columns[colIndex].Text = listView.Columns[colIndex].Text.Insert(0, downArrow);
        else
            listView.Columns[colIndex].Text = listView.Columns[colIndex].Text.Insert(0, upArrow);
    }
}

用法:

1
2
3
4
private void lstOffers_ColumnClick(object sender, ColumnClickEventArgs e)
{
    lstOffers.DrawSortArrow(SortOrder.Descending, e.Column);
}

我使用了一个内置的列表视图。 它被称为XPTable。我正在挖掘我的源代码,以找到将根据排序顺序绘制字形的帮助程序类。这是我在这里使用的代码。

希望这可以帮助,
最好的祝福,
汤姆


我在列标题中使用了unicode箭头字符,并将标题设置为linkbutton。


本文很有帮助,使用SendMessage DllImport。

http://www.codeproject.com/Tips/734463/Sort-listview-Columns-and-Set-Sort-Arrow-Icon-on-C


推荐阅读