【发布时间】:2017-10-11 21:50:46
【问题描述】:
这是我在加载时加载到 dataGridView 中的 XML。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--Game Scores-->
<Leaderboard Name="Nine">
<Score>9</Score>
<Difficulty>Normal</Difficulty>
<Leaderboard Name="FourtyFour">
<Score>44</Score>
<Difficulty>Normal</Difficulty>
</Leaderboard>
<Leaderboard Name="Twelve">
<Score>12</Score>
<Difficulty>Normal</Difficulty>
</Leaderboard>
<Leaderboard Name="Sixer">
<Score>6</Score>
<Difficulty>Normal</Difficulty>
</Leaderboard>
<Leaderboard Name="Fifteen">
<Score>15</Score>
<Difficulty>Normal</Difficulty>
</Leaderboard>
</Leaderboard>
这会加载 XML 并将其放入 dataGridView
XmlDataDocument scorexml = new XmlDataDocument();
scorexml.DataSet.ReadXml(Application.StartupPath + "\\Leaderboard.xml");
dataGridView1.DataSource = scorexml.DataSet;
dataGridView1.DataMember = "Leaderboard";
dataGridView1.Columns["Name"].ReadOnly = true;
dataGridView1.Columns["Score"].ReadOnly = true;
dataGridView1.Columns["Difficulty"].ReadOnly = true;
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
dataGridView1.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
我删除了所有手动排序的功能,因此无法选择行。 它确实对“分数”进行了排序,但将其排序为字符串而不是小数,这就是我的问题继续嘲笑我的地方。
例如,提供的 XML 有 5 个单独的条目,并且完全按照这样的方式排序
Score Difficulty Name
9 Normal Nine
6 Normal Sixer
44 Normal FourtyFour
12 Normal Twelve
15 Normal Fifteen
但所需的排序是从高到低的数字。 (因此是“排行榜”)
Score Difficulty Name
44 Normal FourtyFour
15 Normal Fifteen
12 Normal Twelve
9 Normal Nine
6 Normal Sixer
我在 SO、Microsoft、CP 和许多其他网站上进行了大量研究,这些网站都遇到了基本的类似问题,尽管它们中的大多数都没有使用 XML 将数据加载到其中,因此存在差异。 我尝试了所有可能的解决方案来解决其他成员为 OP 提供的问题,但没有一个解决了我的问题,但对于大多数其他有同样类似问题的人来说,这是一个解决方案。 谁能说出我做错了什么,或者我需要将其转换为十进制而不是字符串,因为我知道默认情况下 dataGridView 一切都是字符串。
其他类似问题的链接(研究证明)
Link 1 -- Link 2 -- Link 3 -- Link 4
还有更多。
【问题讨论】:
-
尝试以下操作:dataGridView1.Sort(dataGridView1.Columns[0].Select(x => int.Parse(x)), ListSortDirection.Descending);
标签: c# xml sorting datagridview