【问题标题】:sorting data from XML as numeric in a dataGridView在 dataGridView 中将 XML 中的数据排序为数字
【发布时间】: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


【解决方案1】:

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

当您阅读 XML 时,然后是 InferTypedSchema;这将推断 Score 是一个数字列。

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 头衔是正确的。干得好。

【讨论】:

  • 非常感谢您所做的正是我所要求的,也感谢您的称赞。我是自学成才,也非常彻底。
猜你喜欢
  • 2015-09-28
  • 2014-03-08
  • 2011-02-10
  • 1970-01-01
  • 2015-10-26
  • 2013-03-03
  • 2013-11-10
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多