Vb.net 需要按订单历史记录的日期对ListView项目进行排序的帮助吗

Vb.net 需要按订单历史记录的日期对ListView项目进行排序的帮助吗,vb.net,vb.net-2010,Vb.net,Vb.net 2010,订单历史记录如下所示: 我要做的是按日期对该列表视图中的项目进行排序 到目前为止,我找不到任何有用的资源材料,可以按日期对项目进行排序 Private Sub frmOrderHistory_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim orders As String = WindowsApplication1.Class1.Orders Dim arrCheck(3) As String

订单历史记录如下所示:

我要做的是按日期对该
列表视图中的项目进行排序

到目前为止,我找不到任何有用的资源材料,可以按日期对项目进行排序

Private Sub frmOrderHistory_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim orders As String = WindowsApplication1.Class1.Orders
    Dim arrCheck(3) As String
    Dim lineNum As Integer = -1
    For Each i As String In System.IO.Directory.GetFiles(orders)
        Dim a, c As String
        a = System.IO.Path.GetFileNameWithoutExtension(i)
        c = System.IO.Path.GetFullPath(i)
        For Each line As String In File.ReadLines(c)
            lineNum = lineNum + 1
            ListView1.Items.Add(a)
            arrCheck = Split(line, ",")
            ListView1.Items(lineNum).SubItems.Add(arrCheck(0))
            ListView1.Items(lineNum).SubItems.Add(arrCheck(1))
        Next

    Next
End Sub

问题的解决方案是创建要在列表视图中显示的对象列表,根据需要对列表视图进行排序,然后使用排序后的列表在列表视图中显示

我建议创建一个类
Order
,从文件中收集订单详细信息。创建订单列表并对列表进行排序,然后在列表视图中显示,如下所示

DataGridView1.DataSource = sortedOrder;
下面是类
顺序

Public Class Order
Public Property OrderDate() As DateTime
Get
    Return m_OrderDate
End Get
Set
    m_OrderDate = Value
End Set
    End Property
Private m_OrderDate As DateTime

Public Property Item() As String
Get
    Return m_Item
End Get
Set
    m_Item = Value
End Set
End Property
Private m_Item As String

Public Property Price() As Double
Get
    Return m_Price
End Get
Set
    m_Price = Value
End Set
End Property
Private m_Price As Double
End Class
下面是列表绑定的代码

Private Sub frmOrderHistory_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim orders As String = WindowsApplication1.Class1.Orders
    Dim arrCheck(3) As String
    Dim orderList = New List(Of Order)()
For Each filePath As var In System.IO.Directory.GetFiles(orders)
    Dim order = New Order()
    order.OrderDate = DateTime.ParseExact(System.IO.Path.GetFileNameWithoutExtension(filePath), "dd-MM-yyyy", CultureInfo.InvariantCulture)
    For Each line As var In System.IO.File.ReadAllLines(filePath)
    arrCheck = line.Split(New Char() {","C})
    order.Item = arrCheck(0)
    order.Price = Convert.ToDouble(arrCheck(1))
    orderList.Add(order)
        Next
Next

Dim sortedOrder = orderList.OrderByDescending(Function([or]) [or].OrderDate).ToList()

    For i As var = 0 To sortedOrder.Count - 1
        listView1.Items.Add(sortedOrder(i).OrderDate.ToString("dd-MM-yyyy"))
        listView1.Items(i).SubItems.Add(sortedOrder(i).Item)
        listView1.Items(i).SubItems.Add(sortedOrder(i).Price.ToString("00.00"))
    Next
End Sub
正如你所看到的,这个解决方案并不是直截了当的。它需要将字符串的格式设置为datetime和back-to-string。双值的情况也一样。还需要多次循环通过项目

更简单的方法是使用datagridview。如果使用datagridview,只需单击几下即可设置列和列的DataFormat。您可以将订单集合直接绑定到它,而无需通过集合循环,如下所示

DataGridView1.DataSource = sortedOrder;

问题的解决方案是创建要在列表视图中显示的对象列表,根据需要对列表视图进行排序,然后使用排序后的列表在列表视图中显示

我建议创建一个类
Order
,从文件中收集订单详细信息。创建订单列表并对列表进行排序,然后在列表视图中显示,如下所示

DataGridView1.DataSource = sortedOrder;
下面是类
顺序

Public Class Order
Public Property OrderDate() As DateTime
Get
    Return m_OrderDate
End Get
Set
    m_OrderDate = Value
End Set
    End Property
Private m_OrderDate As DateTime

Public Property Item() As String
Get
    Return m_Item
End Get
Set
    m_Item = Value
End Set
End Property
Private m_Item As String

Public Property Price() As Double
Get
    Return m_Price
End Get
Set
    m_Price = Value
End Set
End Property
Private m_Price As Double
End Class
下面是列表绑定的代码

Private Sub frmOrderHistory_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim orders As String = WindowsApplication1.Class1.Orders
    Dim arrCheck(3) As String
    Dim orderList = New List(Of Order)()
For Each filePath As var In System.IO.Directory.GetFiles(orders)
    Dim order = New Order()
    order.OrderDate = DateTime.ParseExact(System.IO.Path.GetFileNameWithoutExtension(filePath), "dd-MM-yyyy", CultureInfo.InvariantCulture)
    For Each line As var In System.IO.File.ReadAllLines(filePath)
    arrCheck = line.Split(New Char() {","C})
    order.Item = arrCheck(0)
    order.Price = Convert.ToDouble(arrCheck(1))
    orderList.Add(order)
        Next
Next

Dim sortedOrder = orderList.OrderByDescending(Function([or]) [or].OrderDate).ToList()

    For i As var = 0 To sortedOrder.Count - 1
        listView1.Items.Add(sortedOrder(i).OrderDate.ToString("dd-MM-yyyy"))
        listView1.Items(i).SubItems.Add(sortedOrder(i).Item)
        listView1.Items(i).SubItems.Add(sortedOrder(i).Price.ToString("00.00"))
    Next
End Sub
正如你所看到的,这个解决方案并不是直截了当的。它需要将字符串的格式设置为datetime和back-to-string。双值的情况也一样。还需要多次循环通过项目

更简单的方法是使用datagridview。如果使用datagridview,只需单击几下即可设置列和列的DataFormat。您可以将订单集合直接绑定到它,而无需通过集合循环,如下所示

DataGridView1.DataSource = sortedOrder;

您应该仅使用排序数据绑定listview。或者您想根据列的标题在listview中进行排序?请添加代码说明listview的填充方式。@AlexB。我已经添加了所需的代码,谢谢。@ChetanRanpariya我希望数据在显示之前进行排序。然后,在将数据绑定到listview之前,您需要对数据进行排序。Brasdax发布的答案应该对您有所帮助。是否还有其他需要查找的内容。应仅将listview与已排序的数据绑定。或者您想根据列的标题在listview中进行排序?请添加代码说明listview的填充方式。@AlexB。我已经添加了所需的代码,谢谢。@ChetanRanpariya我希望数据在显示之前进行排序。然后,在将数据绑定到listview之前,您需要对数据进行排序。Brasdax发布的答案应该对您有所帮助。你还有什么要找的吗。