2016-06-12 1 views
0

Que faire pour afficher toutes les lignes du fichier sur des lignes distinctes dans XAML?Affichage des lignes de fichier dans des lignes séparées et de chaque mot dans une colonne séparée à l'aide de UWP C# XAML

J'ai ce code:

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; 

    } 

} 

Malheureusement, au lieu d'obtenir chaque ligne sur chaque nouvelle ligne, je reçois cinq fois la même ligne.

je reçois quelque chose comme:

John 24 IT 
John 24 IT 
John 24 IT 

au lieu d'obtenir:

John 24 IT 
Mike 14 GB 
Steve 22 RU 

Répondre

4

Vous remplacez votre article à chaque occurrence de la boucle.

d'abord, créez votre collection en dehors de la boucle:

var items = new ObservableCollection<ItemsData>(); 

foreach (string line in readFile... 

A l'intérieur de la boucle, retirez le for, puisque vous ne l'utilisez pas réellement:

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

Ensuite, lorsque vous sortir de la boucle foreach, régler le DataContext:

itemsControl.DataContext = items; 

Le code final ressemblerait à:

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

Merci beaucoup! Votre explication est très détaillée, donc je peux comprendre ce qui se passe. Et, bien sûr, votre solution fonctionne! Merci encore! – paddy