简体   繁体   English

如何对对象的属性进行排序并填充到ArrayList中

[英]How to sort properties of object and populate into an ArrayList

How can I sort the following properties in the class then store in an ArrayList ? 如何在类中对以下属性进行排序,然后存储在ArrayList I have populated that to an ArrayList but there an issue when page is reloaded items order in the repeater will change. 我已经将其填充到ArrayList但是重新加载页面时,转发器中的订单顺序将发生变化。 here is population cookies value in to an array 这是人口饼干的价值数组

Dim myCookies As HttpCookie=HttpContext.Current.Request.Cookies("Mycard")
Dim varArryItems As ArrayList = New ArrayList

For i AsInteger=0 To varCookies.Values.Count-1
    Dim AllValues As String()=myCookies.Values(i).Split("|"c)
    Dim item As objCard=New objCard

    item.P_ItemID=Integer.Parse(AllValues(0))
    item.P_ItemTitle=AllValues(1).ToString
    item.P_BrandTitle=AllValues(2).ToString
    item.P_ItemImg=AllValues(3).ToString
    item.P_ItemPrice=Decimal.Parse(AllValues(4))
    'item.P_ItemQauntity=Integer.Parse(AllValues(5))
    'item.P_ItemQauntitySelected=Integer.Parse(AllValues(6))
    item.P_BarcodeID=Integer.Parse(AllValues(7))
    item.P_TotalItemPrice=Decimal.Parse(AllValues(8))
    varArryItems.Add(item)
Next

rptcart.DataSource=varArryItems
rptcart.DataBind()

Here is my objCard class store cookies values I need sort all properties I have tried suing ArrayList Sort method it wasn't work for me. 这是我的objCard类存储cookie值,我需要对所有尝试过使用ArrayList Sort方法尝试过的属性进行排序,这对我来说不起作用。

Public Class objCard  
    Private ID As Integer
    Private ItemID As Integer
    Private BarcodeID As Integer
    Private ItemTitle As String
    Private BrandTitle As String
    Private ItemImg As String
    Private ItemPrice As Decimal
    Private TotalItemPrice As String
    Private ItemQauntity As Integer
    Private ItemQauntitySelected As Integer

    Public Property P_ID As Integer
        Get
            Return Me.ID
        End Get
        Set
            Me.ID = Value
        End Set
    End Property

    Public Property P_ItemID As Integer
        Get
            Return Me.ItemID
        End Get
        Set
            Me.ItemID = Value
        End Set
    End Property

    Public Property P_BarcodeID As Integer
        Get
            Return Me.BarcodeID
        End Get
        Set
            Me.BarcodeID = Value
        End Set
    End Property

    Public Property P_ItemTitle As String
        Get
            Return Me.ItemTitle
        End Get
        Set
            Me.ItemTitle = Value
        End Set
    End Property

    Public Property P_BrandTitle As String
        Get
            Return Me.BrandTitle
        End Get
        Set
            Me.BrandTitle = Value
        End Set
    End Property

    Public Property P_ItemImg As String
        Get
            Return Me.ItemImg
        End Get
        Set
            Me.ItemImg = Value
        End Set
    End Property

    Public Property P_ItemPrice As Decimal
        Get
            Return Me.ItemPrice
        End Get
        Set
            Me.ItemPrice = Value
        End Set
    End Property

    Public Property P_TotalItemPrice As String
        Get
            Return Me.TotalItemPrice
        End Get
        Set
            Me.TotalItemPrice = Value
        End Set
    End Property

    Public Property P_ItemQauntity As Integer
        Get
            Return Me.ItemQauntity
        End Get
        Set
            Me.ItemQauntity = Value
        End Set
    End Property

    Public Property P_ItemQauntitySelected As Integer
        Get
            Return Me.ItemQauntitySelected
        End Get
        Set
            Me.ItemQauntitySelected = Value
        End Set
    End Property
End Class

If you have 如果你有

Public Class Card  
    Property ID As Integer
    Property ItemID As Integer
    Property BarcodeID As Integer
    Property ItemTitle As String
    Property BrandTitle As String
    Property ItemImg As String
    Property ItemPrice As Decimal
    Property TotalItemPrice As Decimal
    Property ItemQuantity As Integer
    Property ItemQuantitySelected As Integer

End Class

Then you can use a List(Of Card) to store the data. 然后,您可以使用List(Of Card)来存储数据。 This has the advantange that the compiler knows that it has instanced of Card in it instead of just some object. 它具有一个优势,编译器知道它具有Card实例,而不仅仅是某些对象。

Dim myCookies As HttpCookie = HttpContext.Current.Request.Cookies("Mycard")
Dim cards = New List(Of Card)

For i As Integer = 0 To varCookies.Values.Count-1
    Dim allValues As String() = myCookies.Values(i).Split("|"c)
    Dim item = New Card

    item.ItemID = Integer.Parse(allValues(0))
    item.ItemTitle = allValues(1).ToString
    item.BrandTitle = allValues(2).ToString
    item.ItemImg = allValues(3).ToString
    item.ItemPrice = Decimal.Parse(allValues(4))
    'item.ItemQuantity = Integer.Parse(allValues(5))
    'item.ItemQuantitySelected = Integer.Parse(allValues(6))
    item.BarcodeID = Integer.Parse(allValues(7))
    item.TotalItemPrice = Decimal.Parse(allValues(8))
    cards.Add(item)

Next

And now that the compiler can get to the properties of the entries in the list, you can 现在,编译器可以获取列表中条目的属性,您可以

Dim dataToPresent = cards.OrderBy(function(c) c.ItemId).ToList()
rptcart.DataSource = dataToPresent
rptcart.DataBind()

and it will show the data in the order you chose. 它将按照您选择的顺序显示数据。

If you need to order by different properties at run-time then a search for "linq dynamic orderby" should give you useful code. 如果您需要在运行时通过不同的属性进行订购,那么搜索“ linq dynamic orderby”应该会为您提供有用的代码。

I noticed that you had Private TotalItemPrice As String which conflicted with item.P_TotalItemPrice=Decimal.Parse(AllValues(8)) . 我注意到您有Private TotalItemPrice As String ,与item.P_TotalItemPrice=Decimal.Parse(AllValues(8))冲突。 If you use Option Strict On then Visual Studio will point out problems like that for you. 如果使用Option Strict On则Visual Studio会为您指出类似的问题。

PS You have Dim myCookies but you use varCookies.Values.Count . PS:您有Dim myCookies但使用的是varCookies.Values.Count You may want to check that that is correct. 您可能要检查是否正确。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM