Как установить глиф сортировки заголовка в .NET ListView?

Как мне установить столбец с глифом сортировки заголовка и его направление в .NET 2.0 WinForms ListView?

Удар

Listview - это .net не является управляемым элементом управления, это очень тонкая оболочка вокруг общего элемента управления Win32 ListView. Это даже не очень хорошая оболочка - она ​​не раскрывает всех возможностей настоящего списка.

Общий элемент управления Win32 listview поддерживает рисование с темами. Одним из тематических элементов является стрелка сортировки заголовка. Общий элемент управления listview в проводнике Windows знает, как нарисовать один из своих столбцов с помощью этого элемента темы.

  • поддерживает ли список Win32, указывающий, какой столбец имеет какой порядок сортировки?
  • контролирует ли заголовок Win32, что listview внутренне использует поддержку, указав, какой столбец имеет какой порядок сортировки?
  • поддерживает ли элемент управления заголовком win32 настраиваемое рисование, чтобы я мог сам нарисовать глиф сортировки заголовка?
  • поддерживает ли элемент управления win32 listview настраиваемый рисунок заголовка, чтобы я мог сам нарисовать глиф сортировки заголовка?
  • поддерживает ли элемент управления .NET ListView настраиваемое рисование заголовка, чтобы я мог сам нарисовать глиф сортировки заголовка?

person Ian Boyd    schedule 16.09.2008    source источник
comment
Вы используете WinForms или WPF?   -  person Maximilian    schedule 16.09.2008


Ответы (4)


Если кому-то нужно быстрое решение (он рисует стрелку вверх / вниз в начале текста заголовка столбца):

ListViewExtensions.cs:

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);
    }
}

Использование:

private void lstOffers_ColumnClick(object sender, ColumnClickEventArgs e)
{
    lstOffers.DrawSortArrow(SortOrder.Descending, e.Column);
}
person Adam    schedule 31.03.2016

Я использую символы стрелок Unicode в заголовке столбца и делаю заголовок кнопкой ссылки.

person DevelopingChris    schedule 16.09.2008
comment
Не могли бы вы опубликовать пример? Это может быть полезно другим. - person GEOCHET; 16.09.2008
comment
Я хотел бы знать, как изменить столбец заголовка списка в кнопку ссылки. Я раньше не слышал о кнопке ссылки. - person Ian Boyd; 16.09.2008
comment
DevelopingChris, очевидно, говорит об ASP.NET - person Axarydax; 09.05.2014

Есть список, который я использую, со встроенным в него. Это называется XPTable. Я копаюсь в исходном коде, чтобы найти этого помощника. класс, который будет рисовать глиф в зависимости от порядка сортировки ... Это код, который я использовал здесь ..

Надеюсь, это поможет, С уважением, Том.

person t0mm13b    schedule 15.01.2010

Эта статья полезна, использует SendMessage DllImport.

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

person IlPADlI    schedule 11.11.2014