بسم الله الرحمن الرحيم
السلام عليكم
كيف لي ان اقوم بترتيب القيم التي بداخل الليست فيو، بشكل تصاعدي
قمت بجعل الخاصية المتعلقة ب
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
ارجو المساعدة
والف شكر
السلام عليكم ورحمة الله وبركاته
تفضل أخي ضعه في آخر كود تعبئة الليست فيو
شكرا اخي
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
السلام عليكم ورحمة الله وبركاته