public void SetSortIcon(int columnIndex, SortOrder order)
        {
            IntPtr columnHeader = SendMessage(Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);

            for (int columnNumber = 0; columnNumber <= Columns.Count - 1; columnNumber++)
            {
                IntPtr   columnPtr = new IntPtr(columnNumber);
                LvÑolumn lvColumn  = new LvÑolumn();
                lvColumn.mask = HDI_FORMAT;
                SendMessageLVCOLUMN(columnHeader, HDM_GETITEM, columnPtr, ref lvColumn);

                if (order != SortOrder.None && columnNumber == columnIndex)
                {
                    switch (order)
                    {
                    case SortOrder.Ascending:
                        lvColumn.fmt &= ~HDF_SORTDOWN;
                        lvColumn.fmt |= HDF_SORTUP;
                        break;

                    case SortOrder.Descending:
                        lvColumn.fmt &= ~HDF_SORTUP;
                        lvColumn.fmt |= HDF_SORTDOWN;
                        break;
                    }
                }
                else
                {
                    lvColumn.fmt &= ~HDF_SORTDOWN & ~HDF_SORTUP;
                }

                SendMessageLVCOLUMN(columnHeader, HDM_SETITEM, columnPtr, ref lvColumn);
            }
        }
 private static extern IntPtr SendMessageLVCOLUMN(IntPtr hWnd, Int32 msg, IntPtr wParam, ref LvÑolumn lPlvColumn);