• DİKKAT

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

Listwiew en hızlı eri çekme

Katılım
6 Temmuz 2008
Mesajlar
1,875
Excel Vers. ve Dili
OFFİCE 2010- TÜRKÇE
Bildiğim ve araştırdığım kadarıyla listwiewa veri çekme şekligenellikle aynı .
Kod:
    Private Sub CommandButton3_Click()
        ListView1.ColumnHeaders.Clear
            With ListView1.ColumnHeaders
                .Add , , "1", 20, 0
                .Add , , "2", 80, 0
                .Add , , "3", 80, 0
                .Add , , "4", 80, 0
               
            End With

        ListView1.ListItems.Clear
        On Error Resume Next
            For i = 2 To [a65536].End(3).Row
            Set liste = ListView1.ListItems.Add(, , Sheets(1).Cells(i, 1).Value)
            [COLOR="Red"]liste.SubItems(1) = Sheets(1).Cells(i, 2).Value
            liste.SubItems(2) = Sheets(1).Cells(i, 3).Value
            liste.SubItems(3) = Sheets(1).Cells(i, 4).Value
            liste.SubItems(4) = Sheets(1).Cells(i, 5).Value
           [/COLOR]
          Next i
         End Sub

Bu sadece bir örnek.

Burada kırmız renkli satırlar sütun sayısı arttıkça onlar da artacak.
Hadi döngü ile aldık diyelim 1700 satırlık veriler 6 saniyede geliyor.
Bu liste arttıkca haliyle sürede artacak.


Bu tür veri çekme olaylarında dizi kodları daha uygun gibi ama burada nasıl kullanılır ne yapılabilir bana yardımcı olabilirmisiniz?
 
ListView nesnesine döngü dışında veri yükleme yöntemi yoktur.

Bu konuda ListBox nesnesi ile daha iyi performans alabilirsiniz.

Sanırım siz nesneye tüm verilerinizi sürekli yüklemek istiyorsunuz. Bu işlem yazılım mantığına pek uymaz. İşinize yarayacak verileri nesneye yüklemeniz daha akıllıca olacaktır.
 
Listbox bu konuda tüm ihtiyaçları karşılamıyor.
Satır renklendirme falan.
Listwiew daha uygu gibi ama

Kod:
alan = rp.UsedRange.Resize(, 44)
   
        For Sat = 1 To UBound(alan)
        If rp.Rows(Sat).EntireRow.Hidden = False Then

            If alan(Sat, 1) <> "" Then .ListItems.Add , , alan(Sat, 1)
            For stn = 2 To 44
                .ListItems(Sat).ListSubItems.Add , , alan(Sat, stn)

Bu şekilde bir kod oluşturdum ve 4 sn kısaldı.

Fakat bu kodlara ek olarak satırlarda şu varsa listwiew satırı da şu renk olsun kodunu ekleyemedim.
 
Kodları bu şekilde yazyorum fakat index of bound hatası eriyor.
Kod:
alan = rp.UsedRange.Resize(, 44)
   
        For Sat = 2 To UBound(alan)
        If rp.Rows(Sat).EntireRow.Hidden = False Then

            If alan(Sat, 1) <> "" Then .ListItems.Add , , alan(Sat, 1)
            For stn = 2 To 44
                .ListItems(Sat - 1).ListSubItems.Add , , alan(Sat, stn)
               
        
      
      
          
            
If rp.Cells(Sat, 4) <> "" And rp.Cells(Sat, 4) <> "-" Then .ListItems(Sat).ListSubItems(stn).ForeColor = vbBlue: .ListItems(Sat).ListSubItems(stn).Bold = True
         Next
             End If
        Next
 
Geri
Üst