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发布的答案应该对您有所帮助。你还有什么要找的吗。