كيفية فرز عنصر تحكم ListView حسب عمود في Visual Basic.NET أو في Visual Basic 2005

للحصول على إصدار Microsoft Visual C#.NET من هذه المقالة، راجع
319401 .
للحصول على إصدار Microsoft Visual Basic 6.0 من هذه المقالة، راجع
170884 .

ملخص

توضح هذه المقالة خطوة بخطوة كيفية فرز عنصر تحكم ListView حسب عمود في Visual Basic.NET أو تطبيق Visual Basic 2005.


عند العمل مع عنصر التحكم ListView ، قد تحتاج إلى فرز المحتويات الخاصة به استناداً إلى عمود معين. يحدث مثال عن هذا النوع من الوظائف في برنامج Windows Explorer عند عرض محتويات مجلد على القرص الثابت الخاص بك. في العرض تفاصيل, يعرض مستكشف Windows معلومات حول الملفات في هذا المجلد. على سبيل المثال، راجع اسم الملف وحجم الملف، ونوع الملف والتاريخ الذي تم فيه تعديل الملف. عند النقر فوق رأس العمود، يتم فرز القائمة مرتبة ترتيبا تصاعدياً استناداً إلى هذا العمود. عند النقر فوق رأس العمود نفسه مرة أخرى، يتم فرز العمود في ترتيب تنازلي.

يحدد المثال في هذه المقالة فئة التي تطبق الواجهة IComparer . بالإضافة إلى ذلك، يستخدم هذا المثال أسلوب مقارنة الفئة كاسينسينستيفيكومبارير لإجراء المقارنة بين العناصر الفعلية. لاحظ أن هذه الطريقة المقارنة غير حساسة لحالة الأحرف ("أبل" يعتبر نفسه "أبل"). لاحظ أيضا أن يتم فرز كافة الأعمدة في هذا المثال بطريقة "نص". إذا كنت تريد فرز بطريقة مختلفة (مثل رقمياً)، يمكنك استبدال السطر التالي من التعليمات البرمجية باستخدام أي أسلوب للفرز الذي تريد استخدامه:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)

كيفية إنشاء نموذج المشروع

  1. إنشاء مشروع تطبيق Windows 2005 Visual Basic أو Visual Basic.NET جديد. يتم إنشاء Form1 افتراضياً.

    ملاحظة: يجب تغيير التعليمات البرمجية في Visual Basic 2005. بشكل افتراضي، Visual Basic إنشاء ملفين للمشروع عند إنشاء مشروع Windows Forms. إذا تم تسمية النموذج Form1، الملفين تمثل النموذج تسمية Form1.vb و Form1.Designer.vb. كتابة التعليمات البرمجية في الملف Form1.vb. مصمم نماذج Windows بكتابة التعليمات البرمجية في ملف Form1.Designer.vb. مصمم نماذج Windows يستخدم الكلمة الأساسية الجزئية لتقسيم تطبيق Form1 إلى ملفين مستقلين. يمنع هذا السلوك التعليمة البرمجية التي تم إنشاؤها من قبل مصمم يتم interspersed مع التعليمات البرمجية الخاصة بك.

    لمزيد من المعلومات حول التحسينات لغة Visual Basic 2005 جديد، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:

    لمزيد من المعلومات حول فئات جزئية ومصمم نماذج Windows، قم بزيارة موقع Msdn التالي:

  2. إضافة عنصر تحكم ListView إلى 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.CollectionsImports 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. انقر فوق رؤوس الأعمدة المختلفة في عنصر تحكم ListView . عند النقر فوق رأس الصفحة، يتم فرز محتويات عنصر التحكم ListView في ترتيب تنازلي استناداً إلى العمود الذي قمت بالنقر فوق. عند النقر فوق رأس العمود نفسه مرة أخرى، يتم فرز هذا العمود في ترتيب تنازلي.
خصائص

رقم الموضوع: 319399 - آخر مراجعة: 19‏/01‏/2017 - المراجعة: 2

تعليقات