2016-06-12 8 views
0

XAMLのすべてのファイル行を別々の行に表示するにはどうすればよいですか?UWPを使用して別の行にファイル行を表示し、別の列に各ワードを表示するC#XAML

public async void ReadFile() 
{ 

    var path = @"CPU.xls"; 
    var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 

    var file = await folder.GetFileAsync(path); 
    var readFile = await Windows.Storage.FileIO.ReadLinesAsync(file); 

    foreach (string line in readFile.OrderBy(line => 
    { 
     int lineNo; 
     var success = int.TryParse(line.Split(';')[4], out lineNo); 
     if (success) return lineNo; 
     return int.MaxValue; 
    })) 
    { 

     string[] splitLines = line.Split(';'); 

     ObservableCollection<ItemsData> items = new ObservableCollection<ItemsData>(); 
     for (int index = 0; index < splitLines.Length; index++) 
     { 
      ItemsData dataitem = new ItemsData 
      { 
       value0 = splitLines[0], 
       value1 = splitLines[1], 
       value2 = splitLines[2], 
       value3 = splitLines[3], 
       value4 = splitLines[4], 
      }; 
      items.Add(dataitem); 
     } 
     itemsControl.DataContext = items; 

    } 

} 

残念ながら、代わりにそれぞれの新しい行にそれぞれの行を取得する、私は同じラインを5回取得:

は、私はそのようなコードを持っています。代わりに取得する

John 24 IT 
John 24 IT 
John 24 IT 

John 24 IT 
Mike 14 GB 
Steve 22 RU 

答えて

4

あなたはループの各発生時に、あなたのアイテムを交換している

は、私のような何かを得ます。

まず、ループの外で、あなたのコレクションを作成します。ループの内側

var items = new ObservableCollection<ItemsData>(); 

foreach (string line in readFile... 

を、あなたが実際にそれを使用しないので、forを削除します。

string[] splitLines = line.Split(';'); 

ItemsData dataitem = new ItemsData 
{ 
    value0 = splitLines[0], 
    value1 = splitLines[1], 
    value2 = splitLines[2], 
    value3 = splitLines[3], 
    value4 = splitLines[4], 
}; 
items.Add(dataitem); 

そして、あなたforeachループを終了し、DataContextを設定します。

itemsControl.DataContext = items; 

最終的なコードは次のようになります:

public async void ReadFile() 
{ 
    var path = @"CPU.xls"; 
    var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 

    var file = await folder.GetFileAsync(path); 
    var readFile = await Windows.Storage.FileIO.ReadLinesAsync(file); 

    var items = new ObservableCollection<ItemsData>(); 

    foreach (string line in readFile.OrderBy(line => 
    { 
     int lineNo; 
     var success = int.TryParse(line.Split(';')[4], out lineNo); 
     if (success) return lineNo; 
     return int.MaxValue; 
    })) 
    { 
     string[] splitLines = line.Split(';'); 

     ItemsData dataitem = new ItemsData 
     { 
      value0 = splitLines[0], 
      value1 = splitLines[1], 
      value2 = splitLines[2], 
      value3 = splitLines[3], 
      value4 = splitLines[4], 
     }; 
     items.Add(dataitem); 
    } 

    itemsControl.DataContext = items; 
} 
+0

ありがとうございました!あなたの説明は非常に徹底的に理解されるので、何が起こるのか理解できます。もちろん、あなたのソリューションは動作します。再度、感謝します! – paddy

関連する問題