2014-02-10 4 views
2

DataGrid에 표시하는 XML 파일에 데이터가 있습니다. (WPF, C#, VisualStudio 2013) 열 중 하나는 숫자 데이터입니다.DataGrid에서 XML의 데이터를 숫자로 정렬하는 방법

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

XMLFILE '계급 : 나는 열을 정렬 할 때 대신 숫자의 알파로 번역되어처럼 숫자로 그 열을 지정하려고 노력하지만, 그것은

XAML 데이터 그리드에 대한 ... 보인다 .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> 

C# 코드는 XML 파일을로드 :

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

내가 일을 클릭하면 내가 원하는 것은

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 = "숫자". 나는 StringFormat = N뿐만 아니라 StringFormat = {} {0 : N}을 시도했다.

무엇이 누락 되었습니까? 이것은 간단해야 할 것 같습니다 ...

답변

2

Element value attribute은 입니다. 따라서 열 유형은 문자열입니다. 문자열의 기본 비교자가 여기에 사용 중입니다.

StringFormat은 바인딩 된 속성의 유형을 변경하지 않으므로 여기서는 작동하지 않습니다. 이것은 GUI에서 문자열을 포맷하는 데 사용됩니다.

익명 형식을 런타임에 작성하고 Rank 속성이 int 인 속성을 바인딩하여 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> 
+1

감사합니다! 그 치료를했습니다 ... – Casuzen

+0

당신은 환영 Casauzen .. :) –

관련 문제