Laden...

Nächste ungeordnete .xml Datei aus Ordner anzeigen?

Erstellt von Lens445 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.785 Views
L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren
Nächste ungeordnete .xml Datei aus Ordner anzeigen?

Hey,

Ich habe eine Methode

public List<Result> GetAllKschl(string fileNameResult, string fileNameData)

die mir eine Liste mit verschiedenen Elementen und dem Inhalt aus einer ewig langen .xml Datei zurückgibt. (Z.b. Info, Einzelpreis, Gesamtpreis, usw.)

Diese Daten gebe ich in einer DataGridView aus. Okay, funktioniert soweit.

Nun möchte ich einen weiteren Button Next File anlegen, der mir dann aus dem Order eben die nächste Datei anzeigt. Bzw wieder nur diese bestimmte Elemente aus der XML. (in der DGV)

Code für meinen ersten Button:

        string fileNameResult = @"bla.xml";
        string fileNameData = @"blabliblub.xml";
     
        private void button1_Click(object sender, EventArgs e)
        {
            PricingAnalyzer analyzer = new PricingAnalyzer();

            List<Result> list = analyzer.GetAllKschl(fileNameResult, fileNameData);

            decimal total = analyzer.GetTotalAmount(fileNameResult, fileNameData);

            //Gibt die Ergebnisse aus
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = list;
            txtTotalAmount.Text = total.ToString();
        }

Das funktioniert 👍

der zweite Button:

        private void btnNext_Click(object sender, EventArgs e)
        {
            PricingAnalyzer analyzer = new PricingAnalyzer();
            string bla = analyzer.GetNextFile();

            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = bla;
        }

So hier für zeig ich mal meine Methode:

        IEnumerator<string> filesEnumerator;
        
        public string GetNextFile()
        {
            filesEnumerator = Directory.EnumerateFiles(@"C:\Pricing\sum", "Result*.xml").GetEnumerator();

            if (filesEnumerator != null && filesEnumerator.MoveNext())
            {
                return filesEnumerator.Current;
            }
            return null;
        }

Jetzt gibt er mir natürlich nichts aus, bzw einfach die ganze Datei, aber ich will ja nur die Elemente wieder haben! (aus der Klasse Result) Muss ich dann die andere Methode auch zusätzlich dort aufrufen? Also versteht ihr was ich meine?

Wieder nur Info, Gesamtsumme, usw. aus der XML Datei filtern und ausgeben, was ich halt mit der anderen Methode mache. Aber ich weiß nicht was ich dann in dem zweiten Button brauche, damit das so funktioniert?

LG

T
2.224 Beiträge seit 2008
vor 6 Jahren

Du Instanzierst deinen Enumerator immer wieder neu beim aufruf der GetNextfile Methode.
Dies solltest du nur einmalig machen, sonst liefert dir dieser immer wieder die gleiche Startdatei.
Es wäre sinnvoller direkt beim deklarieren diesen auch zu Instanzieren.

Ansonsten hilft nur prüfen ob die Pfade stimmen, wovon ich mal grob ausgehen kann.
Und du müsstest mal schauen was dein Enumerator im Debugger anzeigt.
Entweder ist der Ordner leer, dann dürfte auch dein Enumerator keinen Treffer haben oder dein Pattern greift nicht.
Beides musst du aber einmal durch Debuggen, da kann dir keiner helfen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.835 Beiträge seit 2008
vor 6 Jahren

Du machst es Dir viel komplexer, als es ist.

Warum nimmst Du nicht einfach


foreach(var file in Directory.EnumerateFiles(@"C:\Pricing\sum", "Result*.xml"))
{
   yield return file;
}

Das Filtern der Elemente musst Du selbst durchführen.
Das bekommst Du nicht geschenkt.

Den Rest hab ich ehrlich gesagt nicht verstanden.
Alles ziemlich komplex für wahrscheinlich ein sehr einfaches Problem 😉

PS: Schau Dir mal folgendes an
[Artikel] Drei-Schichten-Architektur

Dateinamen sollte man nicht hard coden und wenn man schon fixe Quellen hat, dann sollte man sie auch im Rahmen eines Repository Patterns nutzen.
Das würde Dein Code an vielen Stellen vermutlich sehr vereinfachen.

L
Lens445 Themenstarter:in
45 Beiträge seit 2017
vor 6 Jahren

@T-Virus danke, und ja du hast Recht, es zeigt mir immer wieder die gleiche Datei an 🤔

@Abt ahh jez hab ichs glaub ich.

            PricingAnalyzer analyzer = new PricingAnalyzer();
            string bla = analyzer.GetNextFile();

            List<Result> list = analyzer.GetAllKschl(bla, fileNameData); //hat hier noch gefehlt

            decimal total = analyzer.GetTotalAmount(bla, fileNameData);

Wie löse ich dass denn wenn ich die Datei Namen nicht in meiner Methode haben will, aber diese ja doch dort brauche? 🤔 einfach im "Hauptcode" deklarieren?