gpt4 book ai didi

c# - 如何将 XML 中的数据排序为数据网格中的数字

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:15 26 4
gpt4 key购买 nike

我在 XML 文件中有数据,我在 dataGrid 中显示这些数据。 (WPF、C#、VisualStudio 2013)其中一列是数字数据。当我对列进行排序时,它似乎将其翻译为字母而不是数字,尽管我试图将该列指定为数字...

数据网格的 XAML:

<DataGrid 
ItemsSource="{Binding Path=Elements[Record]}"
AutoGenerateColumns="False" Height="Auto"
Name="dataGridRank"
VerticalAlignment="Top" HorizontalAlignment="Stretch">

<DataGrid.Columns>
<DataGridTextColumn
Header="Name"
Width="*"
Binding="{Binding Element[Name].Value}"/>
<DataGridTextColumn
Header="Rank"
Width="*"
Binding="{Binding Element[Rank].Value, StringFormat={}{0:N}}"/>
</DataGrid.Columns>

</DataGrid>

XML 文件 'ranks.xml':

<Ranks xmlns:dt="urn:schemas-microsoft-com:datatypes">
<Record>
<Name> A </Name>
<Rank dt:dt="number"> 85 </Rank>
</Record>
<Record>
<Name> C </Name>
<Rank dt:dt="number"> 105 </Rank>
</Record>
<Record>
<Name> B </Name>
<Rank dt:dt="number"> 95</Rank>
</Record>
</Ranks>

加载xml文件的C#代码:

var xml = XDocument.Load("Resources/ranks.xml").Root;
dataGridRanks.DataContext = xml;

点击列标题排序Rank时我想要的是:

A 85

B 95

C 105

or

C 105

B 95

A 85

我得到的是:

C 105

A 85

B 95

or

B 95

A 85

C 105

无论是否使用 Stringformat 或 dt:dt="number",我都没有成功尝试。我试过 Stringformat=N 和 StringFormat={}{0:N}。

我错过了什么?看起来这应该很简单......

最佳答案

因为元素值属性string类型。所以列类型是字符串,因此 此处使用默认的字符串比较器

StringFormat 在这里不起作用,因为它不会改变绑定(bind)属性的类型。它仅用于在 GUI 上格式化字符串。

我建议在运行时创建匿名类型并将其与 Rank 属性类型为 int 的类型绑定(bind),以便使用默认的 int 比较器。

代码:

var xml = XDocument.Load("database.xml").Root;
dataGridRank.ItemsSource = xml.Elements("Record")
.Select(e => new { Name = e.Element("Name").Value,
Rank = Convert.ToInt32(e.Element("Rank").Value) });

XAML:

    <DataGrid AutoGenerateColumns="False" Height="Auto" 
Name="dataGridRank"
VerticalAlignment="Top" HorizontalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Name"
Width="*"
Binding="{Binding Name}"/>
<DataGridTextColumn Header="Rank"
Width="*"
Binding="{Binding Rank}"/>
</DataGrid.Columns>

</DataGrid>

关于c# - 如何将 XML 中的数据排序为数据网格中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com