あなたは、ListViewコントロールを並べ替え(ソートを探して、ビットをバックアップ達成することは容易ではない)ことができます

    listView.Items.Clear(); ListViewItem []アイテム=新規のListViewItem [list.Count]。int型私= 0; foreachの(IObjectListViewリストのレコード){文字列[]バフ=新しい文字列[record.Datas.Count]。int型J = 0; foreachの(record.Datas.Valuesの文字列値){バフ[J] =値。J ++; } this.dic.Add(I、レコード)。項目[I] =新規のListViewItem(バフ)。項目[I] .TAG = I。I ++; } this.listView.Items.AddRange(項目); } /// ---------------------------------------------- ---------------------------------- /// <要約>リストビュー及び内部オブジェクトリストの内容をクリアします。</要約> /// <備考> this.listView.MultiSelect = falseは、this.listView.FullRowSelect =はtrue。this.listView.GridLines =はtrue。this.listView.Sorting = SortOrder.None。this.listView.View = View.Details。this.listView.ColumnClick + =新しいColumnClickEventHandler(this.Column_Click)。this.imageList =新しいイメージリスト(); this.imageList.Images.Add(SystemEXE.EternalBreeze.Common.Properties.Resources.Sort_Asc)。this.imageList.Images.Add(SystemEXE.EternalBreeze.Common.Properties.Resources.Sort_Desc)。} /// <要約> ///ソートするメソッド/// </要約> /// <PARAM NAME = "差出人"> </ param>の/// <PARAM NAME = "E"> </ param>のプライベートボイドColumn_Click(オブジェクト送信者、}他{lv.Sorting = SortOrder.Ascending。lv.ListViewItemSorter =新しいListViewItemComparer(e.Column、isStringType)。IconSetting.SetHeaderSortIcon(LV、e.Column、this.imageList、0); }} /// <要約> ///昇順演算子/// </要約>プライベートクラスListViewItemComparer:System.Collections.IComparer {プライベートint型COL。プライベートブールisStringType。パブリックListViewItemComparer(){this.col = 0。this.isStringType =はtrue。}公共ListViewItemComparer(INT列、ブール値isStringType){this.col =カラム。this.isStringType = isStringType。}公共のint型は、(オブジェクトXを比較します オブジェクトY){IF(this.isStringType)を返すString.Compare(((のListViewItem)X).SubItems [COL]の.text、((のListViewItem)Y).SubItems [COL]の.text)。他{(string.IsNullOrEmpty(((のListViewItem)X).SubItems [COL]の.text))を返す場合は-1。そうであれば(string.IsNullOrEmpty(((のListViewItem)Y).SubItems [COL]の.text))リターン1。小数TMP = DecimalUtil.Parse(((のListViewItem)X).SubItems [COL]の.text) - DecimalUtil.Parse(((のListViewItem)Y).SubItems [COL]の.text)。IF(TMP <0)リターン-1。それ以外の場合(TMP> 0)の戻り1; それ以外の戻り0; }}} /// <要約> ///降順演算子/// </要約>プライベートクラスListViewItemComparerDesc:System.Collections.IComparer {プライベートint型コル。プライベートブールisStringType。パブリックListViewItemComparerDesc(){this.col = 0。this.isStringType =はtrue。}公共ListViewItemComparerDesc(INT列、ブール値isStringType){this.col =カラム。this.isStringType = isStringType。}公共intは{(オブジェクトX、オブジェクトy)を比較すると(this.isStringType)を返すString.Compare(((のListViewItem)Y).SubItems [COL]の.text、((のListViewItem)X).SubItems [COL]の.text ); 他{IF(string.IsNullOrEmpty(((のListViewItem)X).SubItems [COL]。テキスト))リターン1。そうであれば(string.IsNullOrEmpty(((のListViewItem)Y).SubItems [COL]の.text))リターン-1。小数TMP = DecimalUtil.Parse(((のListViewItem)X).SubItems [COL]の.text) - DecimalUtil.Parse(((のListViewItem)Y).SubItems [COL]の.text)。IF(TMP <0)リターン1。それ以外の場合(TMP> 0)リターン-1; それ以外の戻り0; リストビューの列ヘッダーアイコンの並べ替えを設定する}}} #regionのWindows API。オーダープライベートクラスIconSetting {民間のconst UInt32型LVM_GETHEADER = 4127を取得します。民間のconst UInt32型HDM_SETIMAGELIST = 4616; 民間のconst UInt32型LVM_SETCOLUMN = 4122; 民間のconstのuint LVCF_FMT = 1; 民間のconstのuint LVCF_IMAGE = 16; 民間のconst int型LVCFMT_IMAGE = 2048; 公共のconst UInt32型LVM_GETCOLUMN = 4121; 公共のconst UInt32型LVCF_ORDER = 0x0020に。//相互運用で使用するためLVCOLUMN [StructLayout(LayoutKind.Sequential、パック= 8、のCharSet = CharSet.Auto)]プライベート構造体LVCOLUMN {パブリックUINTマスクを定義します。公共int型のFMT。公共int型CX。公共のIntPtr pszText。公共int型cchTextMax。公共int型iSubItem。公共のint iImage。公共int型IORDER。} // 2つのオーバーロードのSendMessage関数を宣言します。//違いは、最後のパラメータです。[DLLIMPORT( "user32.dllの")]プライベート静的にexternのIntPtrのSendMessage(のIntPtr hWndは、UInt32型メッセージ、wParamにするUInt32、UInt32型のlParam); [DLLIMPORT( "がUser32"、項目CharSet = CharSet.Auto)]プライベート静的にexternのIntPtrのSendMessage(のIntPtr hWndは、UInt32型MSG、UInt32型wParamに、REF LVCOLUMN lParamに)。// sortIconImageList三角アイコンのpublic staticボイドSetHeaderSortIcon(リストビュー、リストビュー、int型sortColumnIndex、イメージリストsortIconImageList、int型sortIconIndex){{のIntPtr HCを試してみてください。私はint型。//ヘッダコントロールにイメージリストを割り当てます。//ヘッダーコントロールはすべての列を含みます。//ヘッダーコントロールのハンドルを取得します。HC =のSendMessage(listView.Handle、LVM_GETHEADER、(UInt32型)0、(UInt32型)、0); //ヘッダーコントロールにイメージリストを追加します。SendMessage(HC、HDM_SETIMAGELIST、(UInt32型)0、(UInt32型)sortIconImageList.Handle)。//各列の画像を設定します。// //以下のコードでは、我々はすべての列をループでのColumnHeaderで//連続した列に配置するイメージリストに連続した画像を使用します。// // LVCOLUMNはまた、それは、デザイナーで//定義されていた場合、ここでそれを使用することによって、我々はアライメントをリセットしているので、//、アライメントを定義するために使用されます。あなたは、アライメントを設定する必要がある場合は、ここでそれを設定するには、以下のコードを//変更する必要があります。//のための(I = 0; I <listView.Columns.Count、私は++){//開始モディファイソート列だけアイコンを設定の場合(I = sortColumnIndex!)続けます。//最後//列の画像のインデックスを設定するLVM_SETCOLUMNメッセージを使用して変更します。LVCOLUMNのCOL。// col.mask:LVCF_FMTを含ん| LVCF_IMAGE col.mask = LVCF_FMT | LVCF_IMAGE; // LVCFMT_IMAGE col.fmt = LVCFMT_IMAGE。col.fmt | = 0x1000を。//画像はイメージリストから使用します。(I == sortColumnIndex)col.iImage = sortIconIndex場合; 他col.iImage = -1; //イメージはありません。それがあるとき-1 //ゼロに残りを初期化します。col.pszText =(のIntPtr)0。col.cchTextMax = 0; col.cx = 0; col.iSubItem = 0; col.iOrder = 0; // LVM_SETCOLUMNメッセージを送信します。我々は三番目のパラメータで定義されている画像を割り当てる//カラム。SendMessage(listView.Handle、LVM_SETCOLUMN、(UInt32型)は、i、refのCOL)。}}キャッチ(例外例){System.Diagnostics.Trace.WriteLine(ex.ToString())。}} /// <要約> ///リストビュー列の順序インデックス(ゼロベース)を取得します。/// </要約> /// <PARAM NAME = "リストビュー"> </ param>の/// <PARAM NAME = "columnIndexに"> </ param>の /// <リターン> -1を返し失敗した場合。</復帰>のpublic static int型GetColumnOrder(リストビューリストビューは、columnIndexにはINT){(){LVCOLUMNのCOL =新しいLVCOLUMNを試みます。col.mask = LVCF_ORDER。SendMessage(listView.Handle、LVM_GETCOLUMN、(UInt32型)columnIndexに、REF COL)。col.iOrderを返します。}キャッチ(例外例){System.Diagnostics.Trace.WriteLine(ex.ToString())。-1を返します。}}}} #endregion INT columnIndexには){)({LVCOLUMNのCOL =新しいLVCOLUMNを試してみてください。col.mask = LVCF_ORDER。SendMessage(listView.Handle、LVM_GETCOLUMN、(UInt32型)columnIndexに、REF COL)。col.iOrderを返します。}キャッチ(例外例){System.Diagnostics.Trace.WriteLine(ex.ToString())。-1を返します。}}}} #endregion INT columnIndexには){)({LVCOLUMNのCOL =新しいLVCOLUMNを試してみてください。col.mask = LVCF_ORDER。SendMessage(listView.Handle、LVM_GETCOLUMN、(UInt32型)columnIndexに、REF COL)。col.iOrderを返します。}キャッチ(例外例){System.Diagnostics.Trace.WriteLine(ex.ToString())。-1を返します。}}}} #endregion }キャッチ(例外例){System.Diagnostics.Trace.WriteLine(ex.ToString())。-1を返します。}}}} #endregion }キャッチ(例外例){System.Diagnostics.Trace.WriteLine(ex.ToString())。-1を返します。}}}} #endregion

ます。https://my.oschina.net/cjkall/blog/195890で再現

おすすめ

転載: blog.csdn.net/weixin_34391854/article/details/91756231