منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : ترتيب القيم تصاعديا ضمن الليست فيو ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمن الرحيم
السلام عليكم

كيف لي ان اقوم بترتيب القيم التي بداخل الليست فيو، بشكل تصاعدي

قمت بجعل الخاصية المتعلقة ب
sorting= accending

ولكن لم الحظ اي تأثير لتلك الخاصية على القيم التي بالليست فيو
علما ان الكود الدي تم تعبئة الليست فيو به
كود :
Sub PopulateListView()

        With ListView1
            .Clear()
            .View = View.Details
            .Columns.Add("Area_id", 0, HorizontalAlignment.Center)
            .Columns.Add("اســـم المنطقـــة", 390, HorizontalAlignment.Left)

            .GridLines = False
            .FullRowSelect = True
            .Cursor = Cursors.Hand
            .BackColor = System.Drawing.ColorTranslator.FromHtml(My_back_Color_Listview)
            .ForeColor = Color.Black


            Dim Lst As New ListViewItem
            Dim List = From B In db.Fixed_Areas Select B

            For Each x In List

                Lst = New ListViewItem(x.Area_id)
                Lst.SubItems.Add(x.Area)
                .Items.Add(Lst)
            Next
        End With

    End Sub

ارجو المساعدة
والف شكر
السلام عليكم ورحمة الله وبركاته

تفضل أخي ضعه في آخر كود تعبئة الليست فيو

كود :
ListView1.Sort()
شكرا اخي
sooriaty

على اجابتك

ولكن للاسف لم تتم عملية الفرز
السلام عليكم ورحمة الله وبركاته

عفوا أخي بس السطر لازم تكتبه في آخر سطر في Sub مش في البداية
شكرا اخي
sooriaty
على تواصلك

تم وضع السطر المذكور في اخر سطر

ولكن دون جدوى
السلام عليكم
بعد صبر وبحث ..........وفقت والحمد لله على ايحاد حل لفرز القيم
بعد ان تم قراءة شرح مفصل عن الاداة Listview
في منتدى الفريق العربي للبرمجة للاخ Sniper

يتم عن طريق كتابة
كود :
Sub PopulateListView()

        With ListView1
            .Clear()
            .View = View.Details
            .Columns.Add("Area_id", 0, HorizontalAlignment.Center)
            .Columns.Add("اســـم المنطقـــة", 372, HorizontalAlignment.Left)

            .GridLines = False
            .FullRowSelect = True
            .Cursor = Cursors.Hand
            .BackColor = System.Drawing.ColorTranslator.FromHtml(My_back_Color_Listview)
            .ForeColor = Color.Black

            Dim Lst As New ListViewItem
            Dim List = From B In db.Fixed_Areas Select B
            For Each x In List
                Lst = New ListViewItem(x.Area_id)
                Lst.SubItems.Add(x.Area)
                .Items.Add(Lst)
            Next
        End With

        ListView1.Sorting = SortOrder.Ascending
        ListView1.ListViewItemSorter = New ListViewItemComparer(1)
        ListView1.Sort()

    End Sub

ويتم انشاء كلاس، يتم وضع فيه
كود :
Public Class ListViewItemComparer
    Implements IComparer
    Private col As Integer

    Public Sub New()
        col = 0
    End Sub

    Public Sub New(ByVal column As Integer)
        col = column
    End Sub

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
        Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
    End Function

End Class
السلام عليكم ورحمة الله وبركاته

بامكانك وضع هذا الكود لترتيب أي عمود تختاره بالنقر على عنوانه مع تحديد نوع الفرز تصاعدي أم تنازلي بشكل اختياري
كود :
Public Class Form1

    Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
        ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, SortOrder.Descending)
    End Sub

End Class

Public Class ListViewItemComparer
    Implements IComparer
    Private col As Integer
    Private ord As SortOrder

    Public Sub New()
        col = 0
    End Sub

    Public Sub New(ByVal column As Integer, Optional ByVal order As SortOrder = SortOrder.Ascending)
        col = column
        ord = order
    End Sub

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
        If ord = SortOrder.Ascending Then
            Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
        Else
            Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text)
        End If
    End Function

End Class

السلام عليكم ورحمة الله وبركاته




السلام عليكم ورحمة الله وبركاته

وهذه طريقة أخرى لو أردت عند كل ضغطة على عنوان العمود يبدل بين التصاعدي والتنازلي (شبيه بـ DataGridView)
كود :
Public Class Form1

    Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
        If Val(ListView1.Columns(e.Column).Tag) = 0 Then
            ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, SortOrder.Ascending)
            ListView1.Columns(e.Column).Tag = 1
        Else
            ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, SortOrder.Descending)
            ListView1.Columns(e.Column).Tag = 0
        End If
    End Sub

End Class

Public Class ListViewItemComparer
    Implements IComparer
    Private col As Integer
    Private ord As SortOrder

    Public Sub New()
        col = 0
    End Sub

    Public Sub New(ByVal column As Integer, Optional ByVal order As SortOrder = SortOrder.Ascending)
        col = column
        ord = order
    End Sub

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
        Select Case ord
            Case SortOrder.Ascending
                Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
                CType(x, ListViewItem).Tag = 1
            Case SortOrder.Descending
                Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text)
                CType(x, ListViewItem).Tag = 0
            Case SortOrder.None
                If Val(CType(x, ListViewItem).Tag) = 0 Then
                    Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
                    CType(x, ListViewItem).Tag = 1
                Else
                    Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text)
                    CType(x, ListViewItem).Tag = 0
                End If
        End Select
    End Function
End Class

السلام عليكم ورحمة الله وبركاته