在dataGridView中将XML中的数据排序为数字

时间:2017-10-11 21:50:46

标签: c# xml sorting datagridview

这是我在加载时加载到dataGridView中的XML。

AppConfig.cs

这将加载XML并将其放入dataGridView

<?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有5个单独的条目,并且正在按照这个

进行排序
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);

但是所需的排序是从高到低的数字。 (因此是“排行榜”)

Score   Difficulty   Name
9         Normal     Nine
6         Normal     Sixer
44        Normal     FourtyFour
12        Normal     Twelve
15        Normal     Fifteen

我已经在SO,Microsoft,CP和许多其他网站上做了很多研究,这些网站都有一个基本相似的问题,尽管他们中的大部分都没有使用XML来加载数据,因此存在差异。 我尝试了其他成员为OP提供的问题的所有可能的修复,但没有一个解决了我的问题但是对于大多数具有相同类似问题的其他成员来说这是一个修复。 任何人都可以告诉我是做错了什么或者我需要将它转换为十进制而不是一个字符串,因为我知道默认情况下dataGridView一切都是一个字符串。

与其他类似问题的链接(研究证明)

Link 1 - Link 2 - Link 3 - Link 4

还有很多人。

1 个答案:

答案 0 :(得分:0)

看一看,你拥有的一切都很棒。有一点变化。

当你阅读XML然后InferTypedSchema;这将推断得分是一个数字列。

scorexml.DataSet.ReadXml(Application.StartupPath + "\\Leaderboard.xml", XmlReadMode.InferTypedSchema);

XML也有一点问题,根节点和第一个元素有点混淆。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Leaderboard>
  <Leaderboard Name="Nine">
    <Score>9</Score>
    <Difficulty>Normal</Difficulty>
  </Leaderboard>
  <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>

补充:所提供的代码和研究并不能证明你自己给出的Noob头衔。那是件好事。