Xml 如何在保留其他列表框的同时对列表框中的项目进行排序';数据对齐?
我有一个XML文件,从中获取所有数据:Xml 如何在保留其他列表框的同时对列表框中的项目进行排序';数据对齐?,xml,vb.net,arrays,sorting,listbox,Xml,Vb.net,Arrays,Sorting,Listbox,我有一个XML文件,从中获取所有数据: <?xml version="1.0" encoding="utf-8"?> <Tabel> <Member> <Naam>Cruciatum</Naam> <Kills>10</Kills> <Deaths>2</Deaths> <Score>2222</Score> </Mem
<?xml version="1.0" encoding="utf-8"?>
<Tabel>
<Member>
<Naam>Cruciatum</Naam>
<Kills>10</Kills>
<Deaths>2</Deaths>
<Score>2222</Score>
</Member>
<Member>
<Naam>test</Naam>
<Kills>123</Kills>
<Deaths>12</Deaths>
<Score>12222</Score>
</Member>
<Member>
<Naam>test2</Naam>
<Kills>159</Kills>
<Deaths>12</Deaths>
<Score>2222</Score>
</Member>
<Member>
<Naam>test3</Naam>
<Kills>159</Kills>
<Deaths>122</Deaths>
<Score>222284</Score>
</Member>
<Member>
<Naam>test4</Naam>
<Kills>15</Kills>
<Deaths>1229</Deaths>
<Score>129453</Score>
</Member>
</Tabel>
该代码目前运行良好,显示了完整的列表。
但是现在我需要所有数据按照listview的Score列中的值排序,因此在下面的示例中:
我需要第一行说:“1 test3 159 122 1.303 222284”
第二行得分第二等
更新:
我现在使用的不是单独的列表框,而是@SteveDog推荐的1个listview,而不是单独的列表框,使用View属性设置为Details的listview控件,或者使用DataGridView控件。如果必须使用这样的单独列表框,则需要在每个类上实现IComparable接口来覆盖排序 无可否认,在ListView控件中排序有点麻烦。让它如此灵活是很好的,但当你只想做一个简单的排序时,这是一种痛苦。首先,您需要创建一个实现IComparer接口的sorter对象。例如:
Public Class ScoreSorter
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Try
Dim xItem As ListViewItem = CType(x, ListViewItem)
Dim yItem As ListViewItem = CType(y, ListViewItem)
Dim xInt As Integer = Integer.Parse(xItem.SubItems(5).Text)
Dim yInt As Integer = Integer.Parse(yItem.SubItems(5).Text)
Return yInt - xInt
Catch
Return 0
End Try
End Function
End Class
然后需要将ListView控件的ListViewItemSorter属性设置为sorter对象的新实例,然后告诉它进行排序,例如:
ListView1.ListViewItemSorter = New ScoreSorter()
ListView1.Sort()
尝试以下方法(未测试):
您需要有一个
导入系统。Linq
通过n.ChildNodes(3)
更改了n.ChildNodes(4)
,并将代码更改为VB(抱歉)。没问题:p我正在试用SteveDog的想法,使用Listview控件。我从来没有使用过其中的一个,所以我现在也可以学习如何使用:)是的,这可能是一个更好的方法。ListView
控件看起来像Windows资源管理器的右窗格。DataGridView
看起来更像Excel或Access表格。我更新了OP,如何让最后一列(分数)按降序排序?太棒了:)现在可以了,谢谢:D(我想问你如何先按分数再按K/D排序,但我不会打扰你:P这就足够了^)
ListView1.ListViewItemSorter = New ScoreSorter()
ListView1.Sort()
Dim sortedNodes = memberNodes.OrderBy(Function(n) n.ChildNodes(3))
For Each memberNode In sortedNodes
...
Next