• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Listview sutun siralama

ASMET67

Altın Üye
Katılım
8 Haziran 2007
Mesajlar
410
Excel Vers. ve Dili
Excel 2016
Selamlar.
13 sutundan oluşan bir listview nesnesi var . Bu 13 sutundan hangi sutun başlığına tıklarsam o sutunun azalan veya artan olarak sıralanmasını nasıl sağlayabilirim.
Şimdiden teşekkürler.
 
aradığım listview sıralaması

sayın ASMET67 ben de uzun süredir listview nesnesi üzerinde denemeler yapıyorum :) ama dediğiniz olayı bir türlü gerçekleştiremedim yalnızca bütün sütunlarda geçerli ya da tek bir sıralama olayı yapıyor dediğiniz gibi olabilirse inanın benimde işime çok yarayacak iyi çalışmalar...
 
Aşağıdaki kodu kopyalayıp, userform code kısmına yapıştırın,
Kolonlara tıklayınca artan, tekrar tıklayınca azalan sıralama yapıyor,
alıntıdır, detaylarını izah edemeyeceğim.
Sayılarımla
Tansu Erkanlı


Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
On Error Resume Next
Dim i As Integer, J As Integer
Dim x As Integer
Select Case ColumnHeader.Index - 1

Case 2, 3

ListView1.Sorted = False
ListView1.SortKey = ColumnHeader.Index - 1

For i = 1 To ListView1.ListItems.Count

ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
Next i

Case 1

x = ColumnHeader.Index - 1
ListView1.Sorted = False
ListView1.SortKey = x

If ColumnHeader.Index = 1 Then
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Tag = ListView1.ListItems(i).Text

If CDbl(ListView1.ListItems(i).Text) >= 0 Then
ListView1.ListItems(i).Text = CDbl(ListView1.ListItems(i).Text)
Else
ListView1.ListItems(i).Text = "&" & CDbl(ListView1.ListItems(i).Text)
End If
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Text = ListView1.ListItems(i).Tag
Next i
Else

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Tag = ListView1.ListItems(i).ListSubItems(x).Text

If ListView1.ListItems(i).ListSubItems(x).Text <> "" Then
ListView1.ListItems(i).ListSubItems(x).Text = ListView1.ListItems(i).ListSubItems(x).Text
Else
ListView1.ListItems(i).ListSubItems(x).Text = "&" & ListView1.ListItems(i).ListSubItems(x).Text

End If
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Text = _
ListView1.ListItems(i).ListSubItems(x).Tag
Next i

End If

Case Else
ListView1.Sorted = False
ListView1.SortKey = ColumnHeader.Index - 1

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

End Select
End Sub
 
sayin emrexcel123
Listviewde hangi sutuna tıklarsam tıklayayım o sutnu azalan veya artan olarak diger sutunlarla birlikte sırayabilen bir kod varmı?

sayın ASMET67 ben de uzun süredir listview nesnesi üzerinde denemeler yapıyorum :) ama dediğiniz olayı bir türlü gerçekleştiremedim yalnızca bütün sütunlarda geçerli ya da tek bir sıralama olayı yapıyor dediğiniz gibi olabilirse inanın benimde işime çok yarayacak iyi çalışmalar...
 
sayin Terkanli çok teşekkürler paylaşım için minnettarız emeğe saygı :)...
 
Rica ederim, umar&#305;m i&#351;inize yaram&#305;&#351;t&#305;r. Japon yapm&#305;&#351;, Colo ya te&#351;ekk&#252;r etmek gerekli.
Tansu
 
Arkada&#351;lar bu konuyla ilgili bir &#246;rnek eklerseniz bizde faylan&#305;r&#305;z ve de sizlere dua ederiz
 
Listviewde sıralama

Sıralama ile ilgili gerekli olan kodları açıklamaya çalıştırm.


Kod:
ListView1.Sorted = True  [COLOR=red]'Sıralama işlemini açtık.[/COLOR]
ListView1.SortOrder = 1   [COLOR=red]' 0 yazarsanız artan, 1 yazarsanız azalan sıralama yapar.[/COLOR]
ListView1.SortKey = ColumnHeader.Index - 1 [COLOR=red]'Sütunlar sıfırdan başladığı için, indeks numarasının bir eksiği, tıklanan sütundur.[/COLOR]
ListView1.Sorted = False [COLOR=red]'Sıralama işlemini devre dışı bıraktık.[/COLOR]

Burada bilinmesi gereken husus, listegöstericisinin sayıları da metin olarak algıladığıdır. Yani sütundaki değerler metin olarak gözüktüğü için, ilk rakamlara göre sıralama yapar. 1, 2, 16 sayıları, ilk rakamlara göre sıralanacağı için 1,16,2 şeklinde olacaktır. Bunu gidermek için de, sütunda olabilecek en büyük rakam kaç basamaklı ise, bütün sayıları, sıralama işleminden önce o kadar basamağa çıkarmak gerekir. Mesela, en büyük sayımız 999 ise, büün sayıları 3 basamaklı yapmak gerekir. Bunu da değerlerin başına sıfır ekleyerek yaparız. Sıralamadan sonra da, başta bulunan sıfırları kaldırırız. Bu durumda sayılar şu hale gelmelidir: 001, 002, 016 Bu şekilde yapılacak sıralama doğru sonucu verir.

Sıralama, tüm satırlar, ilgili sütuna göre sıralanır.
 
Son düzenleme:
..................
Mesela, en büyük sayımız 999 ise, büün sayıları 3 basamaklı yapmak gerekir. Bunu da değerlerin başına sıfır ekleyerek yaparız. Sıralamadan sonra da, başta bulunan sıfırları kaldırırız. Bu durumda sayılar şu hale gelmelidir: 001, 002, 016 Bu şekilde yapılacak sıralama doğru sonucu verir..........
peki basamak tamamlama tüm sütun için otomatik olarak nasıl yapılmalı
 
peki basamak tamamlama tüm sütun için otomatik olarak nasıl yapılmalı

Döngü kullanarak yapabilirsiniz. Baktığınızın değerin uzunluğuna bakarak, kaç basamaklı olduğunu belirler, sonra da başına gerektiği kadar sıfır ekleriz.

Kod:
...
basamak=len(listview1.listitems(a).subitems(b))  ' a ve b döngü değerleridir.
 
if basamak=1 then listview1.listitems(a).subitems(b)="00" & listview1.listitems(a).subitems(b)  
 
if basamak=2 then listview1.listitems(a).subitems(b)="0" & listview1.listitems(a).subitems(b)
 
sayın terkanlı

kodu forma yapıştırdım fakat aşağıdaki gibi bir hata aldım. bu neden olabilir?

Compile Error : user-defined type not defined

yardımlarınızı bekliyorum...

Aşağıdaki kodu kopyalayıp, userform code kısmına yapıştırın,
Kolonlara tıklayınca artan, tekrar tıklayınca azalan sıralama yapıyor,
alıntıdır, detaylarını izah edemeyeceğim.
Sayılarımla
Tansu Erkanlı


Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
On Error Resume Next
Dim i As Integer, J As Integer
Dim x As Integer
Select Case ColumnHeader.Index - 1

Case 2, 3

ListView1.Sorted = False
ListView1.SortKey = ColumnHeader.Index - 1

For i = 1 To ListView1.ListItems.Count

ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
Next i

Case 1

x = ColumnHeader.Index - 1
ListView1.Sorted = False
ListView1.SortKey = x

If ColumnHeader.Index = 1 Then
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Tag = ListView1.ListItems(i).Text

If CDbl(ListView1.ListItems(i).Text) >= 0 Then
ListView1.ListItems(i).Text = CDbl(ListView1.ListItems(i).Text)
Else
ListView1.ListItems(i).Text = "&" & CDbl(ListView1.ListItems(i).Text)
End If
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Text = ListView1.ListItems(i).Tag
Next i
Else

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Tag = ListView1.ListItems(i).ListSubItems(x).Text

If ListView1.ListItems(i).ListSubItems(x).Text <> "" Then
ListView1.ListItems(i).ListSubItems(x).Text = ListView1.ListItems(i).ListSubItems(x).Text
Else
ListView1.ListItems(i).ListSubItems(x).Text = "&" & ListView1.ListItems(i).ListSubItems(x).Text

End If
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Text = _
ListView1.ListItems(i).ListSubItems(x).Tag
Next i

End If

Case Else
ListView1.Sorted = False
ListView1.SortKey = ColumnHeader.Index - 1

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

End Select
End Sub
 
Orjinalini ekte gönderiyorum, dikkat etmeniz gereken sizin hazırladığınız tüm kısımlarda ListView nesnesi, ListView1 olarak tanımlanmış olmalı, eğerki ListView2 veya farklı tanımlama yaptıysanız, kod çalışmaz. txt dosyayı açıp userformda sona kopyalayın.
 
Orjinalini ekte gönderiyorum, dikkat etmeniz gereken sizin hazırladığınız tüm kısımlarda ListView nesnesi, ListView1 olarak tanımlanmış olmalı, eğerki ListView2 veya farklı tanımlama yaptıysanız, kod çalışmaz. txt dosyayı açıp userformda sona kopyalayın.

aynı şekilde bu kodu da kopyalarım ama aynı hatayı verdi. Kontrol ettim Listview1 adı.

neden olabilir ki???
 
Bu kodu kullanmad&#305;&#287;&#305;n&#305;z zaman, Listview nesnesi normal &#231;al&#305;&#351;&#305;yor mu?.
 
Hemen hemen her haz&#305;rlad&#305;&#287;&#305;m formda bu fonksiyonu kulland&#305;m. Hata vermedi,
&#304;sterseniz, dosyan&#305;z&#305; ekleyin, bakay&#305;m.
 
arkadaşlar merhaba, konunun üzerinden baya bir zaman geçmiş tekrar upladım kusura bakmayın.
sormak istediğim bu ok işaretlerini usercontrol olmadan verebilir miyiz listviewe ? sanırım vb 6 da bu özellik yok.
teşekkürler.
 
Sayın Terkanli paylaşımınız için çok teşekkür ederim. Paylaşım üzerinden baya geçmiş ama benim işime şimdi yaradı :) Bu arada Kodu kopyalayıp yapıştıranlar için hata çıkıyorsa Index yazan yer I ndex olarak yani boşluk olarak geliyor. Aradaki boşluğu kaldırırlarsa sorun düzelecektir.
 
Geri
Üst