2017-05-23 1 views
0

J'ai besoin de lire un fichier texte dans un ListView. Je l'ai déjà enregistré dans le fichier, mais il ne semble pas que quiconque ait une bonne réponse pour lire le fichier. Quand le fichier est lu; toutes les données sont dans la première colonne et ne sont pas affichées sous les en-têtes appropriés.C# Lire/Importer un fichier texte dans un ListView

Voici mes données de fichier texte tel qu'il a été enregistré dans le fichier:

05/23/2017 10 : 44 13 : 44 3 $48.00 05/23/2017 09 : 15 15 : 15 6 $96.00

Voici le code je:

private void ReadInTimeSheet() 
{ 
     foreach (string line in File.ReadAllLines(@"C:filepath\MyTimeSheet.txt")) 
     { 
      lvTimeSheet.Items.Add(new ListViewItem(line)); 
     } 
} 

Et voici la Résultats à partir du en: Data displayed in ListView

En cas de problèmes d'ouverture du fichier; toutes les données sont contenues dans la première colonne, et ressemble exactement à la vue que j'ai du texte dans le fichier ci-dessus.

Ce que je besoin est la date affichée dans la colonne 1, heure de début dans la colonne 2, temps d'arrêt dans la colonne 3, total des heures travaillées dans la colonne 4, et combien payer les heures reçoivent dans la colonne 5.

Comment puis-je y parvenir? Merci d'avance.

+0

Étape 1) créer un modèle qui fonctionne Etape 2) convertir vos lignes à une collection LINQ de ficelle 3) à l'aide LINQ Prenez (5) et passer au modèle. 4) Permettre au modèle d'analyser chaque ligne dans son emplacement/variable approprié. –

+0

Comment écrivez-vous dans le fichier? Pouvez-vous s'il vous plaît ajouter du code à la façon dont vous écrivez dans le fichier? –

Répondre

1

D'abord, vous devez ajouter des colonnes à votre vue de liste et vous assurer que View est défini sur Details. Seting la largeur de colonne à -2 volonté automatique du format eux

private void Form1_Load(object sender, EventArgs e) 
{ 
    lvTimeSheet.View = View.Details; 
    lvTimeSheet.Columns.Add("Date"); 
    lvTimeSheet.Columns.Add("Start Time"); 
    lvTimeSheet.Columns.Add("Stop Time"); 
    lvTimeSheet.Columns.Add("Total Hours"); 
    lvTimeSheet.Columns.Add("Total Pay"); 

    // Auto-size the columns 
    for (int i = 0; i < lvTimeSheet.Columns.Count; i++) 
    { 
     lvTimeSheet.Columns[i].Width = -2; 
    } 
} 

Ensuite, lorsque vous lisez votre dossier, vous devrez lire 5 lignes, et d'ajouter ces cinq lignes en une seule ListViewItem. Notez qu'un ListViewItem peut être pour un tableau, donc nous allons boucle à travers vos lignes de fichiers, cinq lignes à la fois, créez un tableau avec ces lignes, et ajouter une nouvelle ListViewItem qui est peuplé par ce tableau:

private void ReadInTimeSheet() 
{ 
    var fileLines = File.ReadAllLines(@"C:\filepath\MyTimeSheet.txt")) 

    for (int i = 0; i + 4 < fileLines.Length; i += 5) 
    { 
     lvTimeSheet.Items.Add(
      new ListViewItem(new[] 
      { 
       fileLines[i], 
       fileLines[i + 1], 
       fileLines[i + 2], 
       fileLines[i + 3], 
       fileLines[i + 4] 
      })); 
    } 

    // Resize the columns 
    for (int i = 0; i < lvTimeSheet.Columns.Count; i++) 
    { 
     lvTimeSheet.Columns[i].Width = -2; 
    } 
} 

sortie

enter image description here

+0

Cela a fonctionné parfaitement. Je vous remercie. – NMeneses