Laden...

openfiledialog.multiselect????

Erstellt von myBig? vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.555 Views
M
myBig? Themenstarter:in
241 Beiträge seit 2005
vor 17 Jahren
openfiledialog.multiselect????

Hallo zusammen,

habe da ein kleines Problem, bei dem ich nicht weiter komme. Ich möchte zwei Dateien auslesen und sie dann nachher in zwei verschiedene DataGridview anzeigen lassen. Ich gehe folgendermassen vor: Ich öffne über eine openfiledialog zwei dateien aus. Über getdata() gelange ich dann in die Klasse wo die Dateien ausglesen werden.


fileNames = openFileDialog1.FileNames;

foreach (string fileName1 in fileNames)
{
      fileName = fileName1;
      getData();
}

Das auslesen klappt ja auch wunderbar, nur wird mir immer nur eine Datei ausgegeben. Ist ja im Grunde auch klar, da die erste Datei wieder überschreiben wird, wenn die zweite gelesen wird. Hat jemand eine Idee, wie man das lösen könnte, oder muss ich die beiden Dateien in zwei unterschiedliche Klassen übergeben?
Wäre schön wenn mir einer dabei helfen könnte oder mir ein Tipp geben kann wie man das am besten lösen kann🙂

MfG

738 Beiträge seit 2007
vor 17 Jahren

hi,

für dein Problem ist das von dir gepostetet CodeSnippet ziemlich irrelevant. Soll heißen, es hängt davon ab, was du in getData machst!

Prinzipiell könntest du getData() ja den dateinamen mitübergeben und die Informationen aus der Datei auslesen und anzeigen.

U
237 Beiträge seit 2007
vor 17 Jahren

Ich glaube eher, dass er die Dateien im Array ansprechen will. Da es ja immer nur 2 Dateien sind, kannst du das wohl hard codieren.

//Der erste Eintrag im Array
openFileDialog1.FileNames[0];
//Der zweite Eintrag im Array
openFileDialog1.FileNames[1];

Jetzt kannst du ja die ausgewählten Dateien ansprechen und die dann ins datagrid laden.

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int

M
myBig? Themenstarter:in
241 Beiträge seit 2005
vor 17 Jahren

hi nin,

sorry, stimmt natürlich. In getdata() hole ich mir die beiden Tabellen aus der Klasse


        private void getData()
        {
            switch(fileName.Substring(fileName.Length - 3).ToString().ToLower())
            {
                case "csv":
                    {
                        td.td_auslesen(fileName);
                        dataGridView1.DataSource = td.Teile1;
                        dataGridView2.DataSource = td.Dispo1;
                        break;
                    }
            }
        }

Weiß zwar nicht ob es weiterhilft, ich denke mal schon. Hier ist dann nochmal die Klasse in der ich die Dateien auslese.


        private void auslesen(string fileName)
        {
            DataTable Teile = new DataTable("TeileTabelle");
            DataTable Dispo = new DataTable("DispoTabelle");
            string word = "";
            char[] deli = new char[] { ';' };

            if (File.Exists(fileName.Substring(0, fileName.Length - 4) + ".csv"))
            {
                fileName = fileName.Substring(0, fileName.Length - 4) + ".csv";
            }
            
                StreamReader sr = new StreamReader(fileName);

                word = sr.ReadLine();

                if (word.Split(deli).Length <= 14)
                {
                    string[] ersteZeile = word.Split(';');

                    foreach (string strSpalte in ersteZeile)
                    {
                        Teile.Columns.Add(strSpalte, typeof(string));
                    }

                    while ((word = sr.ReadLine()) != null)
                    {
                        //if (word.Split(deli).Length <= 14)
                        //{
                            string[] ersteZeile1 = word.Split(';');

                            DataRow zeile = Teile.NewRow();

                            for (int i = 0; i < ersteZeile1.Length; i++)
                            {
                                for (int j = 0; j < ersteZeile.Length; j++)
                                {
                                    zeile[j] = ersteZeile1[i];
                                    i++;
                                }
                            }
                            Teile.Rows.Add(zeile);
                        //}
                    }
                }
                else
                {
                    string[] ersteZeile = word.Split(';');

                    foreach (string strSpalte in ersteZeile)
                    {
                        Dispo.Columns.Add(strSpalte, typeof(string));
                    }

                    while ((word = sr.ReadLine()) != null)
                    {
                        //if (word.Split(deli).Length <= 14)
                        //{
                            string[] ersteZeile1 = word.Split(';');

                            DataRow zeile = Dispo.NewRow();

                            for (int i = 0; i < ersteZeile1.Length; i++)
                            {
                                for (int j = 0; j < ersteZeile.Length; j++)
                                {
                                    zeile[j] = ersteZeile1[i];
                                    i++;
                                }
                            }
                            Dispo.Rows.Add(zeile);
                        //}
                    }
                }
            //sr.Close();
            Teile1 = Teile;
            Dispo1 = Dispo;
            sr.Close();
        }

Gehe ich denn überhaupt richtig daran? Nicht das ich völlig auf der falschen Spur bin?

MfG

738 Beiträge seit 2007
vor 17 Jahren

@unclesam:

ich finde die Lösung mit "foreach (file in fileNames)" schon schöner.
am besten gleich direkt:

foreach (string file in openFileDialog1.FileNames)

@myBig?
Aber das eigentliche Problem liegt doch wo anders, oder ??

M
myBig? Themenstarter:in
241 Beiträge seit 2005
vor 17 Jahren

Habe das Problem gefunden und gelöst. Die Übergabe muss der Variablen müssen in der if-Abfrage geschehen und nicht erst ganz am schluss wie in meinem ersten Eintrag.


private void auslesen(string fileName)
        {
            DataTable Teile = new DataTable("TeileTabelle");
            DataTable Dispo = new DataTable("DispoTabelle");
            string word = "";
            char[] deli = new char[] { ';' };

            if (File.Exists(fileName.Substring(0, fileName.Length - 4) + ".csv"))
            {
                fileName = fileName.Substring(0, fileName.Length - 4) + ".csv";
            }
            
                StreamReader sr = new StreamReader(fileName);

                word = sr.ReadLine();

                if (word.Split(deli).Length <= 14)
                {
                    string[] ersteZeile = word.Split(';');

                    foreach (string strSpalte in ersteZeile)
                    {
                        Teile.Columns.Add(strSpalte, typeof(string));
                    }

                    while ((word = sr.ReadLine()) != null)
                    {
                            string[] ersteZeile1 = word.Split(';');

                            DataRow zeile = Teile.NewRow();

                            for (int i = 0; i < ersteZeile1.Length; i++)
                            {
                                for (int j = 0; j < ersteZeile.Length; j++)
                                {
                                    zeile[j] = ersteZeile1[i];
                                    i++;
                                }
                            }
                            Teile.Rows.Add(zeile);
                    }
                    Teile1 = Teile;//Hier muss die Übergabe geschehen für die Tabelle Teile
                }
                else
                {
                    string[] ersteZeile = word.Split(';');

                    foreach (string strSpalte in ersteZeile)
                    {
                        Dispo.Columns.Add(strSpalte, typeof(string));
                    }

                    while ((word = sr.ReadLine()) != null)
                    {
                            string[] ersteZeile1 = word.Split(';');

                            DataRow zeile = Dispo.NewRow();

                            for (int i = 0; i < ersteZeile1.Length; i++)
                            {
                                for (int j = 0; j < ersteZeile.Length; j++)
                                {
                                    zeile[j] = ersteZeile1[i];
                                    i++;
                                }
                            }
                            Dispo.Rows.Add(zeile);
                    }
                    Dispo1 = Dispo;//Hier muss die Übergabe für Dispo geschehen!!!
                }

Auf jeden Fall vielen Dank für die Hilfe!!!

Jetzt werden beide Tabellen gleichzeitig angezeigt🙂

MfG

B
1.529 Beiträge seit 2006
vor 17 Jahren
  1. Wieso übergibst du den Dateinamen nicht als Parameter an getData()? Die Übergabe über eine Instanzvariable ist ... unschön.

  2. Zum Zerlegen des Dateinamens bitte die Klasse System.IO.Path benutzen.

  3. Wozu entfernst du erst die Extension, nur um sie dann wieder hinzuzufügen? Wenn schon nicht die Path-Klasse, dann wenigstens Test mittels String.EndsWith().

  4. Wenn du MultiSelect benutzt, kann der Benutzer beliebig viele Dateien auslesen. Da ist es wenig intuitiv, wenn nur zwei geöffnet werden, vor allem da nicht bestimmt ist, in welcher Reihenfolge sie in FileNames auftauchen.