Autor Beitrag
bergrath
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Di 13.11.07 08:59 
Hallo Leute.
Ich habe mal ne Frage und zwar wollte ich folgendes wissen. Ich überprüfe die Werte einer DataTable mit einer If-Schleife. Ich prüfe eine Spalte in der nur die Werte 3,5,W,E stehen sollen. Meine If-Schleife sieht folgendermaßen aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 foreach (DataRow row in PVSDataTable.Rows)
                    {
                        if (row["21/22"].ToString() != "GC")
                        {
                            MessageBox.Show("Fehler");
                        }
                        if (row["23"].ToString() != "D")
                        {
                            MessageBox.Show("Kein C307");
                        }

                        if ((row["24"].ToString() != "3") | (row["24"].ToString() != "5") | (row["24"].ToString() != "W") | (row["24"].ToString() != "E"))
                        {
                            MessageBox.Show("fehler in Spalte 24");
                        }
                   




                    }
                    MessageBox.Show("Okay");
            }}


Nun meine Frage: Die Werte meiner DataTable haben alle die Werte 3,5,W,E , aber ich bekomme trotzdem die MessageBox mit der Fehlermeldung angezeigt. Es ist doch aber so, daß zuerst alle Bedingungen in der if-Schleife geprüft werden, also daß immer ein Wert zutrifft. Wieso bekomme ich dann immer die Fehlermeldung?


Für Hinweise wäre ich sehr dankbar.

MfG


Moderiert von user profile iconjasocul: Topic aus C# - Die Sprache verschoben am Di 13.11.2007 um 08:23
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 13.11.07 10:24 
Zunächst einmal: if-Schleife ist Quatsch. Schleifen sind for, foreach, while usw. if ist eine Anweisung.

Überlege doch bitte, was Deine if-Anweisung prüfen soll: Wenn der Wert "3" ist, dann ist die Abfrage "ungleich 5" wahr; also wird die MessageBox aufgerufen. Du willst die MessageBox aber haben, wenn der Wert "ungleich 3" UND "ungleich 5" usw. ist.

Gruß Jürgen
bergrath Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Di 13.11.07 10:46 
Hi. Danke für die Antwort. Ist mir auch aufgefallen. Deswegen habe ich meinen Code geändert und die Bedingungen mit UND verknüpft, aber ich erhalte weiterhin die Fehlermeldung. Ich habe die Bedingungen auf != gesetzt ( also z.B. !=3) und habe mit && verknüpft, aber es funktioniert nicht.

Die MessageBox wird doch ausgelöst, sobald die Bedingung true ist, oder?

Was muss ich da anders machen?


Für Hinweise wäre ich sehr dankbar.

MfG
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 13.11.07 16:35 
Was machst Du eigentlich mit:
ausblenden C#-Quelltext
1:
row["24"].ToString()					

Lautet wirklich der Name der Spalte "24", oder ist es nicht eher die Nummer der Spalte?

Von welchem Datentyp ist die Spalte? Kannst Du direkt String oder Char vergleichen?

Übrigens: Wenn das Problem auch nach einer Änderung besteht, ist es im Zweifelsfall besser, den geänderten Code neu zu zitieren.

Jürgen
Hajoseb
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 42



BeitragVerfasst: Sa 17.11.07 19:35 
user profile iconJüTho hat folgendes geschrieben:
Zunächst einmal: if-Schleife ist Quatsch. Schleifen sind for, foreach, while usw. if ist eine Anweisung.
...
Gruß Jürgen


Siehe auch www.if-schleife.de

:D