如何在 Visual Basic.NET 中] 或 [Visual Basic 2005 中的資料行排序清單檢視控制項

文章翻譯 文章翻譯
文章編號: 319399 - 檢視此文章適用的產品。
本文章的有 Microsoft Visual C#.NET] 版本請參閱 319401
本文章的有 Microsoft Visual Basic 6.0] 版本請參閱 170884
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您,如何依您的 Visual Basic.NET 或 Visual Basic 2005 應用程式中的一個資料行排序 清單檢視 控制項。

當您使用 清單檢視 控制項時,可能會想要排序它根據特定的資料行的內容。在 Windows 檔案總管中發生這種功能的範例程式在硬碟上檢視資料夾內容時。在詳細資料] 檢視中,Windows 檔案總管] 顯示該資料夾中的檔案的資訊。比方說您可以看到檔案名稱、 檔案大小、 檔案] 類型和修改檔案的日期。按一下其中一個資料行行首時,清單會依序遞增根據該資料行的順序。當您再次按一下相同的資料行行首資料行是依遞減順序排序。

本文中的範例定義一個實作 IComparer 介面的類別。此外,以下範例將使用 CaseInsenstiveComparer 類別的 [比較] 方法來執行實際的比較的項目。請注意這種方法比較不區分大小寫 ("蘋果"被視為是蘋果"相同)。同時而且,請注意所有在這個範例中的資料行以 「 文字 」 方式排序。如果您想要排序以不同的方式 (例如以數字),您可以使用您想要使用的排序,無論使用何種方法來取代下列程式碼行:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
				

如何建置範例專案

  1. 建立新的 Visual Basic.NET 或 Visual Basic 2005 Windows 應用程式專案。 預設會建立 Form1。

    附註您必須變更程式碼,在 Visual Basic 2005 中。當您建立 Windows Form 專案時,預設值,Visual Basic 會建立兩個專案檔案。如果表單名為 Form1,代表表單的兩個檔案被命名 Form1.vb 並 Form1.Designer.vb。Form1.vb 檔案中撰寫程式碼。Windows Form 設計工具將 Form1.Designer.vb 檔案中寫入程式碼。Windows Form 設計工具會使用部分關鍵字,Form1 實作分成兩個獨立的檔案。這種行為可以防止設計工具產生的程式碼正在與您的程式碼位置顛倒。

    如需有關新的 Visual Basic 2005 語言加強功能的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    如需有關部分類別和 Windows Form 設計工具的詳細資訊,請造訪下列 MSDN 網站:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  2. 清單檢視 控制項加入至 Form1。調整表單成為幾英吋寬高的幾個英吋的大小。
  3. 將下列程式碼貼至表單的類別:
    Private lvwColumnSorter As ListViewColumnSorter
    					
  4. 下列程式碼貼至 InitializeComponent 方法呼叫之後的在表單的建構函式:
    ' Create an instance of a ListView column sorter and assign it 
    ' to the ListView control.
    lvwColumnSorter = New ListViewColumnSorter()
    Me.ListView1.ListViewItemSorter = lvwColumnSorter
    					
  5. 下列程式碼貼入表單的 Load 事件:
    Dim columnheader As ColumnHeader    ' Used for creating column headers.
    Dim listviewitem As ListViewItem    ' Used for creating ListView items.
    
    ' Make sure that the view is set to show details.
    ListView1.View = View.Details
    
    ' Create some ListView items consisting of first and last names.
    listviewitem = New ListViewItem("Mike")
    listviewitem.SubItems.Add("Nash")
    Me.ListView1.Items.Add(listviewitem)
    
    listviewitem = New ListViewItem("Kim")
    listviewitem.SubItems.Add("Abercrombie")
    Me.ListView1.Items.Add(listviewitem)
    
    listviewitem = New ListViewItem("Sunil")
    listviewitem.SubItems.Add("Koduri")
    Me.ListView1.Items.Add(listviewitem)
    
    listviewitem = New ListViewItem("Birgit")
    listviewitem.SubItems.Add("Seidl")
    Me.ListView1.Items.Add(listviewitem)
    
    ' Create some column headers for the data.
    columnheader = New ColumnHeader()
    columnheader.Text = "First Name"
    Me.ListView1.Columns.Add(columnheader)
    
    columnheader = New ColumnHeader()
    columnheader.Text = "Last Name"
    Me.ListView1.Columns.Add(columnheader)
    
    ' Loop through and size each column header to fit the column header text.
    For Each columnheader In Me.ListView1.Columns
        columnheader.Width = -2
    Next
    					
  6. 下列程式碼貼入的 清單檢視ColumnClick 事件:
    ' Determine if the clicked column is already the column that is 
    ' being sorted.
    If (e.Column = lvwColumnSorter.SortColumn) Then
        ' Reverse the current sort direction for this column.
        If (lvwColumnSorter.Order = SortOrder.Ascending) Then
            lvwColumnSorter.Order = SortOrder.Descending
        Else
            lvwColumnSorter.Order = SortOrder.Ascending
        End If
    Else
        ' Set the column number that is to be sorted; default to ascending.
        lvwColumnSorter.SortColumn = e.Column
        lvwColumnSorter.Order = SortOrder.Ascending
    End If
    
    ' Perform the sort with these new sort options.
    Me.ListView1.Sort()
    					
  7. 按一下 [專案] 功能表 加入類別] 來將新的類別加入至專案。
  8. 所有新類別中的預設程式碼取代下列程式碼:
    Imports System.Collections
    Imports System.Windows.Forms
    
    Public Class ListViewColumnSorter
        Implements System.Collections.IComparer
    
        Private ColumnToSort As Integer
        Private OrderOfSort As SortOrder
        Private ObjectCompare As CaseInsensitiveComparer
    
        Public Sub New()
            ' Initialize the column to '0'.
            ColumnToSort = 0
    
            ' Initialize the sort order to 'none'.
            OrderOfSort = SortOrder.None
    
            ' Initialize the CaseInsensitiveComparer object.
            ObjectCompare = New CaseInsensitiveComparer()
        End Sub
    
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
            Dim compareResult As Integer
            Dim listviewX As ListViewItem
            Dim listviewY As ListViewItem
    
            ' Cast the objects to be compared to ListViewItem objects.
            listviewX = CType(x, ListViewItem)
            listviewY = CType(y, ListViewItem)
    
            ' Compare the two items.
            compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
    
            ' Calculate the correct return value based on the object 
            ' comparison.
            If (OrderOfSort = SortOrder.Ascending) Then
                ' Ascending sort is selected, return typical result of 
                ' compare operation.
                Return compareResult
            ElseIf (OrderOfSort = SortOrder.Descending) Then
                ' Descending sort is selected, return negative result of 
                ' compare operation.
                Return (-compareResult)
            Else
                ' Return '0' to indicate that they are equal.
                Return 0
            End If
        End Function
    
        Public Property SortColumn() As Integer
            Set(ByVal Value As Integer)
                ColumnToSort = Value
            End Set
    
            Get
                Return ColumnToSort
            End Get
        End Property
    
        Public Property Order() As SortOrder
            Set(ByVal Value As SortOrder)
                OrderOfSort = Value
            End Set
    
            Get
                Return OrderOfSort
            End Get
        End Property
    End Class
    					
  9. 儲存、 建置,然後再執行範例專案。
  10. 按一下 [清單檢視 控制項中各種不同的資料行行首。當您按一下 [標頭以根據您按一下資料行的遞增順序排序 清單檢視 控制項的內容。當您再次按一下相同的資料行行首時該資料行是依遞減順序排序。

屬性

文章編號: 319399 - 上次校閱: 2007年5月11日 - 版次: 3.5
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
關鍵字:?
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:319399
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com