2 Spalten im DataTable vergleichen

coulio

Cadet 2nd Year
Registriert
Juni 2014
Beiträge
31
Ich habe folgendes Problem.
Ich habe Select benutzt um die Werte in meiner DataTable zu bekommen.

Code:
string montant = txbmontant.Text;
cmd.CommandText = "SELECT pureenr,puree_nom, quantite, quantite_cage FROM `commande` join cage using (pureenr) WHERE compartiment = " + montant;
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;

Jetzt moechte ich die Werte der Spalte "quantite" und "quantite_Cage" vergleichen. Ich möchte mich vergewissern dass die Werte der dritten Spalten (also jede Zeile vergleichen) tasächlich kleiner sind als die der 4 Spalte.

Code:
string montant = txbmontant.Text;
string sqlis = "SELECT pureenr,puree_nom, quantite, quantite_cage FROM `commande` join cage using (pureenr) WHERE `quantite`< quantite_cage  AND compartiment = " + montant;
MySqlCommand cmdis = newMySqlCommand(sql, conn);
string resultat = cmdis.ExecuteScalar().ToString();
label.Text = "";
if (resultat == "")
{
label.Text = "Bestellungsmenge grösser als Mengen Im Lager";
}
else
{
label.Text = "Bestellmenge tatsächlich kleiner als Mengen Im Lager";
}

Ich bekomme zwar keinen Fehlermeldung aber Label.Text wird nicht genau angezeigt.

was sollte ich da ändern? Anscheinend funktioniert ( cmdis.ExecuteScalar().ToString();) nicht so richtig.

Ausserdem ist es möglich dass man direkt von der datatable Spalten vergleicht, ohne noch mal die Datenbank abzufragen und dann durch SQL ein vergleich erledigen??

danke
Ergänzung ()

Habe auch folgendes versucht.

for (int i = 0; i < dtlivraison.Rows.Count; i++)
{
if (Convert.ToInt32(dtlivraison.Rows[2]) < Convert.ToInt32(dtlivraison.Rows[3]))
{
label.Text = "ist ok";
}
else
{
label.Text = "NICHT OK";
}
}


aber der Label zeigt immer "ist ok" obwohl eine Zahl in der 3.Spalte(Quantite) deutlich mehr als die Zahl in der 4.Spalte (quantite_Cage) .
 
Zuletzt bearbeitet:
Als erstes mal statt Concert.ToInt32 CInt
Selbiges wäre für CStr

Dann Themenname beinhaltet den Datentyp Datatable
Warum benutzt ihn dann nicht auch?
 
danke Arne1234. was meinst du ?
ich kann nur Convert.ToInt32 oder Convert.ToInt16 benutzen.
in der datatable moechte ich positive Werte vergleichen
 
In welcher Datatable
Ich sehe nicht dass du eine benutzt...
Und warum kannst du NUR Concert.ToInt nutzen?
 
aso. ich hab aus dem ersten Select die Werte in einer DataTable bekommen. die sieht so aus.
da.SelectCommand = cmdSelect1;
ds.DataSetName = "ds";

dtlivraison.TableName = " dtlivraison";
ds.Tables.Add ( dtlivraison);
bldlivraison.DataAdapter = da;

//DataTable füllen
da.Fill(ds, " dtlivraison");

bslivraison.DataSource = ds;
bslivraison.DataMember = " dtlivraison";

grd.DataSource = bslivraison;
Ergänzung ()

Wenn ich Convert.toString benutze, kommt diese Fehlermeldung:

Der Operator "<" kann nicht auf Operanden vom Typ "string" und "string" angewendet werden.
 
Ergänzung vom 07.06.2014 00:36 Uhr: Habe auch folgendes versucht.

Code:
for (int i = 0; i < dtlivraison.Rows.Count; i++)
{
if (Convert.ToInt32(dtlivraison.Rows[i][2]) < Convert.ToInt32(dtlivraison.Rows[i][3]))
{
label.Text = "ist ok";
}
else
{
label.Text = "NICHT OK";
}
}
aber der Label zeigt immer "ist ok" obwohl eine Zahl in der 3.Spalte(Quantite) deutlich mehr als die Zahl in der 4.Spalte (quantite_Cage) .

Hallo coulio,

nachdem ich deine Ergänzung im 1. Post gelesen habe, warst du schon auf dem richtigen Weg! Man vergleicht z.B. in einer Schleife die Werte der DataTable miteinander, das Convert.ToInt kann man nutzen. Das Problem was du jedoch da hast, ist dass du nach der fehlerhaften Zeile wahrscheinlich noch weitere Zeilen hast die ok sind, folglich wird der Text im Label dann wieder mit "ist ok" überschrieben. Ich würde an deiner Stelle im else Zweig wo der Label Text auf "NICHT OK" gesetzt wird einfach danach ein "break;" einfügen damit die Schleife dann abbricht.
 
Danke dir @Rossibaer.
hat alles funktioniert. Danke




Hätte noch eine Frage: wie könnte ich eine Column im DataTable mit der Farbe rot auffüllen.

Anstatt "NICHT OK" hätte ich gerne die 3.Spalte rot gehabt. Ist es möglich?
 
Da mischst du Dinge die eigentlich nichts damit zu tun haben!
Nun ein DataTable ist ein Objekt das im Arbeitsspeicher liegt aber nicht sichtbar ist wie z.B. ein Control. Folglich geht es nicht eine Zelle des DataTables einzufärben, ist halt kein UI Element. Für die Anzeige eines DataTables kann man ein Control wie z.B. DataGridView nehmen, dass als Datenquelle (DataSource) dieses DataTable zugewiesen bekommt. Je nachdem wie du das DataTable zur Anzeige bringst, musst du im entsprechenden Control z.B. DataGridView die Zelle herausfinden und dann einfärben. Schau mal in der Hilfe/MSDN nach DataGridView und dessen Möglichkeiten...
 
Zurück
Oben