2016-03-23 15 views
1

-3000 ila 10000 arasında bir sayı sütununa sahip bir nesne listesi görünümüm var. 2000'den daha az bir şey için bir filtre uygulamanız gerekiyor (bu, tüm negatif sayıları da içermelidir)). Örnekleri okudum ve yardım ettim (http://objectlistview.sourceforge.net/cs/filtering.html#filtering-label) ama C# 'de ve VB.net ile çalışıyorum. Normalde dönüşümü anlayabilirim ama bu beni güldürüyor.VB.net Nesne listesi görüntüleme sütununa göre filtreleme aralığı

Temsilci yerine bir işlev kullanan başka bir kod parçam var (bir görüntüyü uygularken) ancak bu filtreleme örneğinde çalışamadım. Ben de bir regex kullanmayı denedim ama sadece numaraları ile uğraştığım için bunu regex olmadan yapmam gerektiğini hissediyorum.

Birisi bana bunun üzerinden geçmeme yardımcı olmak için VB.net'te numara aralıklarına sahip özel bir filtreleme örneği gösterebilir mi?

Teşekkürler! İşte

ben birlikte attı bir örnek: enter image description here

sen, sadece (30 yükseklikte altında ikisi) Mary Swanson ve Jiminy Cricket göstermelidir tıklayın "Filtre Uygula" . İşte

Ben OLV

Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click 

    Dim LvLst As New List(Of Person) 

    Dim LvItm As New Person With {.FirstName = "Joe", 
            .LastName = "Blow", 
            .Glasses = "Y", 
            .Height = "75", 
            .HeightBar = "75"} 
    LvLst.Add(LvItm) 

    Dim LvItm2 As New Person With {.FirstName = "Mary", 
            .LastName = "Swanson", 
            .Glasses = "N", 
            .Height = "25", 
            .HeightBar = "25"} 
    LvLst.Add(LvItm2) 

    Dim LvItm3 As New Person With {.FirstName = "Mike", 
            .LastName = "Tyson", 
            .Glasses = "N", 
            .Height = "125", 
            .HeightBar = "125"} 

    LvLst.Add(LvItm3) 

    Dim LvItm4 As New Person With {.FirstName = "Jiminy", 
            .LastName = "Cricket", 
            .Glasses = "Y", 
            .Height = "-9", 
            .HeightBar = "-9"} 

    LvLst.Add(LvItm4) 


    ObjectListView3.View = View.Details 

    Dim myImages = New ImageList 
    myImages.Images.Add(My.Resources.Hipster_Glasses_icon) 
    myImages.Images.Add(My.Resources.Button_important_icon) 
    ObjectListView3.SmallImageList = myImages 

    ObjectListView3.UseCellFormatEvents = True 
    ObjectListView3.OwnerDraw = True 
    Col_Glasses.ImageGetter = Function(x As Object) As Integer 
            Dim casted As Person = DirectCast(x, Person) 
            If casted.Glasses = "Y" Then 
             Return 0 
            Else 
             Return 1 
            End If 
           End Function 

    Col_Height.Renderer = New BarRenderer(0, 100, Pens.Black, Brushes.Gold) 

    'Set no data message 
    ObjectListView3.EmptyListMsg = "No Data Found" 
    ObjectListView3.EmptyListMsgFont = New Font("Tahoma", 18) 

    'Allows you to type and search inside the olv 
    ObjectListView3.IsSearchOnSortColumn = True 

    ObjectListView3.SetObjects(LvLst) 

End Sub 

oluşturmak için kullanılan kod Ve bu

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 
    ObjectListView3.ModelFilter = Function(x As Object) As ModelFilter 

             Dim casted As Person = DirectCast(x, Person) 

             If casted.Height <= CInt(HeightFilter.Text) Then 
              Return x 
             End If 

            End Function 
End Sub 

Kişiye

Public Class Person 
    Public Property FirstName As String 
    Public Property LastName As String 
    Public Property Glasses As String 
    Public Property Height As Integer 
    Public Property HeightBar As Integer 
End Class 
Class yardıma ihtiyaç filtre düğmesine arkasında kodudur

Hata, IModelFilter öğesinin temsilci türü olmadığını söylüyor. İşlevden ne döneceğimi bilmiyorum? Gözlük sütunu için kullandığım görüntü aygıtını görüyor musunuz? Aynı yaklaşımı kullanmaya çalışıyordum ama bir IModelFilter için hiç kullanmadım. Yardım için teşekkürler!

+0

Örnek C# kodu oldukça basit görünüyor ve kolayca vb.net'e çevrilmelidir. Hangi kodu denediğini gösterebilir misin? –

+0

Convert C# to vb.net http://www.developerfusion.com/tools/convert/csharp-to-vb/ – Dejan

+0

hey @ChaseRocker Soruyu istediğiniz gibi güncelledim. Herhangi bir yardım çok takdir edilecektir –

cevap

1

Filtreyi yeni bir ModelFilter'e ayarlayın. x, işleve iletilen nesnedir, Person sınıfınıza aktarır, sonra da boyuta göre filtrelenir. Filtre, Temel olarak (saklamak için) veya False (filtrelemek için) her bir Kişiyi işledikçe döndürür.

ObjectListView3.ModelFilter = New BrightIdeasSoftware.ModelFilter(Function(x) CType(x, Person).Height <= CInt(Me.HeightFilter.Text)) 
+0

Teşekkürler @ChaseRocker! Bana bir zaman kazandırdın. Bu çözümü kullanan herkes için, çalışmasını sağlamak için değiştirmem gereken tek şey, UseFiltering öğesini True (ObjectListView3.UseFiltering = True) olarak ayarlamaktır. –

İlgili konular