Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在保留其他列表框的同时对列表框中的项目进行排序';数据对齐?_Xml_Vb.net_Arrays_Sorting_Listbox - Fatal编程技术网

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文件,从中获取所有数据:

<?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