*.txt Datei in DataGridView einlesen!?

Guten Morgen!

Ich habe folgendes Problem und weiss nicht weiter. Ich möchte eine Textdatei in ein Datagridview einlesen. Diese Textdatei sieht allgemein vom Aufbau folgendermaßen aus:

Daten1/Daten1/Daten1
Daten2/Daten2/Daten2
Daten3/Daten3/Daten3
.
.
.
usw.

Dabei möchte ich diese Struktur als Tabelle im DataGrid angezeigt bekommen. Also 3 Spalten (vllt mit Namen versehen „Nummer“, „Vorname“, „Nachname“)

bisher konnte ich eine solche Datei mit folgenden Code nur in der Console anzeigen lassen:

private void btnEinlesen\_Click(object sender, EventArgs e)
 {
 string path = @"c:\MyTest.txt";

 // Delete the file if it exists.
 if (!File.Exists(path))
 {
 // Create the file.
 using (FileStream fs = File.Create(path))
 {
 Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");

 // Add some information to the file.
 fs.Write(info, 0, info.Length);
 }
 }

 // Open the stream and read it back.
 using (FileStream fs = File.OpenRead(path))
 {
 byte[] b = new byte[1024];
 UTF8Encoding temp = new UTF8Encoding(true);

 while (fs.Read(b, 0, b.Length) \> 0)
 {

 //Console.WriteLine(temp.GetString(b));
 }
 }

allerdings hätte ich dabei auch lieber, wenn ich die Datei mit einem OpenFileDialog auswählen könnte. Dazu habe ich folgenden Code gefunden:

string strFilePath;
 Stream myStream = null;
 OpenFileDialog openFileDialog1 = new OpenFileDialog();

 openFileDialog1.InitialDirectory = "c:\\";
 openFileDialog1.Filter = "txt files (\*.txt)|\*.txt|All files (\*.\*)|\*.\*";
 openFileDialog1.FilterIndex = 2;
 openFileDialog1.RestoreDirectory = true;

 if (openFileDialog1.ShowDialog() == DialogResult.OK)
 {
 try
 {
 if ((myStream = openFileDialog1.OpenFile()) != null)
 {
 using (myStream)
 {
 string strContent = string.Empty;

 }
 }
 }
 catch (Exception ex)
 {
 MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
 }
 }

allerdings habe ich keine Ahnung wie ich die Daten wie beschrieben in ein DataGridView bekomme, da ich bisher noch nicht damit gearbeitet habe! Ich hoffe, ihr könnt mir helfen. Quellcode wäre vorallem sehr hilfreich!

Vielen Dank schonmal!
Grüße Toni

Hat denn keiner eine Idee oder fehlen euch Angaben? Kann ja sein, dass ich mal wieder das wichtigste vergessen habe aber denke eigentlich nicht…

Gruß Toni

Hi,
ich gehe davon aus das du in WinForms arbeitest, denn in WPF gibt es kein DataGridView.
Ich hab zwar keine Ahnung wie es mit einem DataGridView geht aber ich habe ein Beispiel für ein ListView.
http://cid-58daec18eb0102d4.office.live.com/self.asp…
kannst du dir hier runterladen. Ist in Visual Studio 2010 programmiert.
Für den Fall das du es mit WPF probieren willst, solltest du XML und ein GridView verwenden.
Hier der Code, zunächst XAML

 Öffnen

und der dazugehörige C#-Code:

 //Du brauchst noch folgende usings
 using Microsoft.Win32;
 PersonCollection \_person = new PersonCollection();
 ICollectionView \_stringcollection;
 private void open(string filename)
 {
 XmlSerializer serializer = new XmlSerializer(typeof(PokémonCollection));

 StreamReader sr = new StreamReader(filename);
 PersonCollection pers = (PersonCollection)serializer.Deserialize(sr);
 setView(pers);
 }
 private void setView(PersonCollection pers)
 {
 this.\_person = pers;
 this.\_personcollection = new ListCollectionView(pers);
 this.DataContext = \_personcollection;
 }

 private void Button\_Click(object sender, RoutedEventArgs e)
 {
 OpenFileDialog ofd = new OpenFileDialog();
 ofd.DefaultExt = ".pers";
 ofd.Filter = "Person-Datei(.pers)|\*.pers|xml-Datei(.xml)|\*.xml";
 ofd.Title = "pers-Datei öffnen";
 ofd.Multiselect = false;
 if (ofd.ShowDialog() == true)
 {
 open(ofd.FileName);
 }
 }

außerdem brauchst du noch folgende Klassen:

 [Serializable]
 public class Person
 {
 public Person()
 {

 }

 private string nummer;
 private string name;
 private string vorname;

 public string Nummer
 {
 get { return nummer; }
 set { nummer = value; }
 }
 public string Name
 {
 get { return name; }
 set { name = value; }
 }
 public string Vorname
 {
 get { return vorname; }
 set { vorname = value; }
 }
 }
 [Serializable]
 public class PersonCollection : ObservableCollection
 {
 }

Lg der einzigware

Hallo!

Ich hab es soweit hinbekommen. Also ich lese die gewählte txt datei aus und trenne die daten durch „/“. diese werden somit in 3 spalten angezeigt. Allerdings ist es so, dass nur die 1. zeile gefüllt wird. es sind jeweils 3 Daten in einer zeile der textdatei zu finden. die darauffolgenden 3 daten sind in einer neuen zeile, sprich durch „Enter“ getrennt. letztendlich möchte ich 3 spalten mit beliebig vielen Zeilen einlesen können. Meine Frage ist nun, wie ich das anstelle? Sollte doch jetzt nur noch eine kleinigkeit sein, oder?
Anbei habe ich mal den Quellcode angehängt.

/// Contains column names.
 List \_names = new List();

 /// Contains column data arrays.
 List \_dataArray = new List();

 public Form1()
 {
 InitializeComponent();
 }

 /// This method builds a DataTable of the data.
 public DataTable GetResultsTable()
 {
 // Create the output table.
 DataTable d = new DataTable();

 // Loop through all process names.
 for (int i = 0; i objectNumbers = new List();

 // Put every column's numbers in this List.
 foreach (string number in this.\_dataArray[i])
 {
 objectNumbers.Add((object)number);
 }

 // Keep adding rows until we have enough.
 while (d.Rows.Count 0)
 {
 Text = temp.GetString(b);//Dateiinhalt lesen
 Spalte = Text.Split(Trennzeichen);//Daten trennen
 Anzahl = Spalte.Length;


 for (int i = 0; i 

Vielen Dank für die bisherige Hilfe!
Gruß Toni