13-10-13, 11:52 PM (آخر تعديل لهذه المشاركة : 13-10-13, 11:57 PM {2} بواسطة kafi2030.)
السلام عليكم
بعد صبر وبحث ..........وفقت والحمد لله على ايحاد حل لفرز القيم
بعد ان تم قراءة شرح مفصل عن الاداة Listview
في منتدى الفريق العربي للبرمجة للاخ Sniper
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
23-10-13, 02:50 AM (آخر تعديل لهذه المشاركة : 23-10-13, 03:41 AM {2} بواسطة @@أبورائد@@.)
السلام عليكم ورحمة الله وبركاته
بامكانك وضع هذا الكود لترتيب أي عمود تختاره بالنقر على عنوانه مع تحديد نوع الفرز تصاعدي أم تنازلي بشكل اختياري
كود :
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