|
-
Sep 29th, 2000, 10:49 PM
#1
Hi-
I need to sort the listview in two ways:
1)Sorted according to the value in cell. Currently if I sort 3,22 it appears like 22 then 3 but I should have 3 then 22..anybody has any solution
2)If I like to fix one coulmn vlaue fixed like
No AccountNo
0 123
0 112
0 165
0 110
1 110
I need to sort like
No AccountNo
0 110
0 112
0 123
0 165
1 110
Is it possible?
Please help
Sohel
-
Sep 29th, 2000, 11:36 PM
#2
You can use the Format$ function (with or without the "$", with is preferred) to format your account numbers, as in:
Code:
Dim liMyListItem As ListItem
Set liMyListItem = ListView1.ListItems.Add(, , Format$(AcctNo, "0000"))
' or - if it's a subitem, use something like:
liMyListItem.SubItems(1) = Format$(AcctNo, "0000")
Good luck.
"It's cold gin time again ..."
Check out my website here.
-
Oct 18th, 2000, 10:11 AM
#3
New Member
Hi, I have the same problem with sorting now.
Were you able to sort the certain column in a listview?
-
Oct 18th, 2000, 10:22 AM
#4
_______
<?>
Here is sample code on sorting a listview by alpha, date, or number. It was given to me by Aaron Young and it works wonders.
Code:
'CREATE SORTING OF LISTVIEW BY ALPHA, NUMBER, DATE
'
'PUT THIS IN GEN DECLARATIONS OF FORM
'*****************************************************************
'
Private Declare Function LockWindowUpdate Lib "user32" _
(ByVal hWndLock As Long) As Long
'
Private Function InvNumber(ByVal Number As String) As String
'This function is to deal with the negative numbers, so then they can be sorted alphabetically
'
Static i As Integer
For i = 1 To Len(Number)
Select Case Mid$(Number, i, 1)
Case "-": Mid$(Number, i, 1) = " "
Case "0": Mid$(Number, i, 1) = "9"
Case "1": Mid$(Number, i, 1) = "8"
Case "2": Mid$(Number, i, 1) = "7"
Case "3": Mid$(Number, i, 1) = "6"
Case "4": Mid$(Number, i, 1) = "5"
Case "5": Mid$(Number, i, 1) = "4"
Case "6": Mid$(Number, i, 1) = "3"
Case "7": Mid$(Number, i, 1) = "2"
Case "8": Mid$(Number, i, 1) = "1"
Case "9": Mid$(Number, i, 1) = "0"
End Select
Next
InvNumber = Number
End Function
'
'LOAD THE LISTVIEW WITH RANDOM INFORMATION
'PUT THIS IN LOAD OR CLICK
'*********************************************************
'
Dim l As Long
Dim dblRnd As Double
Dim dteRnd As Date
With ListView1
' Add three columns to the list - one for each data type.
' Note that the data type is set in the column header's
' tag in each case
'
.ColumnHeaders.Add(, , "String").Tag = "STRING"
.ColumnHeaders.Add(, , "Number").Tag = "NUMBER"
.ColumnHeaders.Add(, , "Date").Tag = "DATE"
'
' Set the column alignment - has no bearing on the sorts.
'
.ColumnHeaders(1).Alignment = lvwColumnLeft
.ColumnHeaders(2).Alignment = lvwColumnRight
.ColumnHeaders(3).Alignment = lvwColumnCenter
'
' Set BorderStyle property.
ListView1.BorderStyle = ccFixedSingle
'
' Set View property to Report.
ListView1.View = lvwReport
'
' Populate the list with data
With .ListItems
For l = 1 To 100
With .Add(, , "ListItem " & Format(l, "0000"))
dblRnd = (Rnd() * 10000) - 5000
dteRnd = (Rnd() * 1000) + Date
.ListSubItems.Add , , Format(dblRnd, "0.00")
.ListSubItems.Add , , Format(dteRnd, _
"dd/mm/yyyy")
End With
Next l
End With
End With
'
'PUT THIS IN THE COLUMNCLICK EVENT OF LISTVIEW
'***********************************************
Dim lngStart As Long
Dim lngCursor As Long
Dim l As Long
Dim strFormat As String
Dim strData() As String
Dim lngIndex As Long
On Error Resume Next
With ListView1
' Display the hourglass cursor while list is sorting
lngCursor = .MousePointer
.MousePointer = vbHourglass
' Prevent the ListView control from updating on screen
' and also to speed up the sort
LockWindowUpdate .hWnd
' Check the data type of the column being sorted,
lngIndex = ColumnHeader.Index - 1
Select Case UCase$(ColumnHeader.Tag)
Case "DATE"
' Sort by date.
strFormat = "YYYYMMDDHhNnSs"
' Loop through the values in this column. Re-format
' the dates so as they can be sorted alphabetically,
With .ListItems
If (lngIndex > 0) Then
For l = 1 To .Count
With .Item(l).ListSubItems(lngIndex)
.Tag = .Text & Chr$(0) & .Tag
If IsDate(.Text) Then
.Text = Format(CDate(.Text), _
strFormat)
Else
.Text = ""
End If
End With
Next l
Else
For l = 1 To .Count
With .Item(l)
.Tag = .Text & Chr$(0) & .Tag
If IsDate(.Text) Then
.Text = Format(CDate(.Text), _
strFormat)
Else
.Text = ""
End If
End With
Next l
End If
End With
' Sort the list alphabetically by this column
.SortOrder = (.SortOrder + 1) Mod 2
.SortKey = ColumnHeader.Index - 1
.Sorted = True
' Restore the previous values to the 'cells' in this
' column of the list from the tags, and also restore
' the tags to their original values
With .ListItems
If (lngIndex > 0) Then
For l = 1 To .Count
With .Item(l).ListSubItems(lngIndex)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next l
Else
For l = 1 To .Count
With .Item(l)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next l
End If
End With
Case "NUMBER"
' Sort Numerically
strFormat = String(30, "0") & "." & String(30, "0")
'Re-format the values so as they
' can be sorted alphabetically.
With .ListItems
If (lngIndex > 0) Then
For l = 1 To .Count
With .Item(l).ListSubItems(lngIndex)
.Tag = .Text & Chr$(0) & .Tag
If IsNumeric(.Text) Then
If CDbl(.Text) >= 0 Then
.Text = Format(CDbl(.Text), _
strFormat)
Else
.Text = "&" & InvNumber( _
Format(0 - CDbl(.Text), _
strFormat))
End If
Else
.Text = ""
End If
End With
Next l
Else
For l = 1 To .Count
With .Item(l)
.Tag = .Text & Chr$(0) & .Tag
If IsNumeric(.Text) Then
If CDbl(.Text) >= 0 Then
.Text = Format(CDbl(.Text), _
strFormat)
Else
.Text = "&" & InvNumber( _
Format(0 - CDbl(.Text), _
strFormat))
End If
Else
.Text = ""
End If
End With
Next l
End If
End With
' Sort the list alphabetically by this column
.SortOrder = (.SortOrder + 1) Mod 2
.SortKey = ColumnHeader.Index - 1
.Sorted = True
' Restore the previous values to the 'cells' in this
' column of the list from the tags, and also restore
' the tags to their original values
With .ListItems
If (lngIndex > 0) Then
For l = 1 To .Count
With .Item(l).ListSubItems(lngIndex)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next l
Else
For l = 1 To .Count
With .Item(l)
strData = Split(.Tag, Chr$(0))
.Text = strData(0)
.Tag = strData(1)
End With
Next l
End If
End With
Case Else
'Just sort it alphabetically
.SortOrder = (.SortOrder + 1) Mod 2
.SortKey = ColumnHeader.Index - 1
.Sorted = True
End Select
' Unlock the list window so that the OCX can update it
LockWindowUpdate 0&
' Restore the previous cursor
.MousePointer = lngCursor
End With
"A myth is not the succession of individual images,
but an integerated meaningful entity,
reflecting a distinct aspect of the real world."
___ Adolf Jensen
-
Oct 18th, 2000, 01:45 PM
#5
New Member
How do I sort numbers?
In my column I have
150
100
1000
Listview sort only sorts alpha. How do I sort numbers so it would display it:
100
150
1000
Originally posted by sahmmed
Hi-
I need to sort the listview in two ways:
1)Sorted according to the value in cell. Currently if I sort 3,22 it appears like 22 then 3 but I should have 3 then 22..anybody has any solution
2)If I like to fix one coulmn vlaue fixed like
No AccountNo
0 123
0 112
0 165
0 110
1 110
I need to sort like
No AccountNo
0 110
0 112
0 123
0 165
1 110
Is it possible?
Please help
Sohel
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|