2017-05-23 2 views
0

Ich muss eine Textdatei in eine ListView lesen. Ich habe es bereits in der Datei gespeichert, aber es sieht nicht so aus, als hätte jemand eine gute Antwort darauf, die Datei wieder einzulesen. Wenn die Datei eingelesen wird; Alle Daten sind in der ersten Spalte und nicht in den entsprechenden Überschriften angezeigt.C# Lesen/Importieren einer Textdatei in eine ListView

Hier ist meine Textdatei Daten, wie sie in der Datei gespeichert wurde:

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

Hier ist der Code, den ich verwendet:

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

Und hier sind die Ergebnisse aus dem eingelesen: Data displayed in ListView

Falls Sie Probleme beim Öffnen der Datei haben; Alle Daten sind in der ersten Spalte enthalten und sehen genauso aus wie die Ansicht des Textes in der obigen Datei.

Was ich brauche, ist die in Spalte 1, angezeigte Datum Startzeit in Spalte 2, arbeiteten Zeit in Spalte 3, Gesamtstunden stoppt in Spalte 4, und wie viel zahlen die Stunden in der Spalte erhalten 5.

Wie kann ich das erreichen? Vielen Dank im Voraus.

+0

Schritt 1) ​​erstellen ein Modell, das zum Modell Schritt 2) konvertieren Sie Ihre Linien auf eine LINQ Sammlung von string 3) Mit LINQ Nehmen Sie (5) und übergeben funktioniert. 4) Ermöglichen Sie dem Modell, jede Zeile in ihren richtigen Slot/Variable zu analysieren. –

+0

Wie schreiben Sie in die Datei? Können Sie bitte Code hinzufügen, wie Sie in die Datei schreiben? –

Antwort

1

Zuerst sollten Sie Spalten zu Ihrer Listenansicht hinzufügen und sicherstellen, dass View auf Details festgelegt ist. Seting die Spaltenbreite -2 Willen Auto-Größe sie:

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

Dann, wenn Sie Ihre Datei zu lesen, müssen Sie 5 Zeilen lesen, und diese fünf Zeilen als eine einzige ListViewItem hinzuzufügen. Beachten Sie, dass ein ListViewItem kann mit einem Array initialisiert werden, so dass wir nur eine Schleife durch Ihre Datei Linien, fünf Zeilen zu einer Zeit, erstellen Sie ein Array mit diesen Zeilen, und fügen Sie ein neues ListViewItem, die von diesem Array gefüllt ist:

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

Ausgabe

enter image description here

+0

Das hat perfekt funktioniert. Vielen Dank. – NMeneses