2016-04-13 14 views
-4

Line 50:Eingabezeichenfolge war nicht in der richtigen Format3

total_cost += Convert.ToInt16(lbl_total_price.Text); 

Eine nicht behandelte Ausnahme während der Ausführung der aktuellen Webanfrage auf. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt. Ausnahmedetails: System.FormatException: Eingabezeichenfolge war nicht in einem richtigen Format.

Wie wird das korrigiert?

+0

und was ist der Gesamtpreis in der Eingabebox? – wimh

+4

Durch Angabe eines gültigen Wertes in 'lbl_total_price.Text' oder durch Verwendung von' int16.TryParse' –

+1

Die 'Zeichenkette' könnte zu groß/zu klein sein oder ein' $ 'Symbol haben oder Dezimaltrennzeichen oder nicht-numerische Zeichen haben oder falsches Tausendertrennzeichen entsprechend Ihrer aktuellen Kultur ... aber in allen Fällen, überprüfen Sie bitte den 'lbl_total_price.Text' – Ian

Antwort

1

I zweifeln, ob Preis (was sein kann, sagen wir, 14.95) ist eine ganze Zahl Wert (Int16 in der Frage); wahrscheinlich meinen Sie Double oder Decimal:

// Or .ToDecimal which is a better choice for money 
    total_cost += Convert.ToDouble(lbl_total_price.Text); 

Ein besserer Ansatz ist analysieren versuchen:

Double value; // Or Decimal 

    if (Double.TryParse(lbl_total_price.Text, out value)) 
    total_cost += value; 
    else { 
    // lbl_total_price.Text is not a floating point value, say, "bla-bla-bla" 
    //TODO: put required response for such format error 
    } 
0

Überprüfen Sie, ob Wert numerisch ist mit int.TryParse

int total_cost; 
bool isInt = int.TryParse(lbl_total_price.Text, out total_cost); 
0

Es gibt eine Vielzahl sind von Dingen, die hier schief gehen könnten, aber das Grundprinzip ist, dass der Wert, der in IhremistTextfeld ist keine gültige Ganzzahl (daher schlägt die Konvertierung fehl).

Möglicherweise möchten Sie mit der Int16.TryParse() Methode prüfen, die einen boolean zurück, um anzuzeigen, wenn das Parsen erfolgreich war oder nicht:

int price; 
if(Int16.TryParse(lbl_total_price.Text, out price)) 
{ 
    // If your conversion was successful, then price will be stored here 
} 
else 
{ 
    // Uh oh. It wasn't in the proper format. 
} 

jedoch ohne mehr über das Format zu wissen, dass Ihr Wert in ist, könnte es schwer zu sagen, was genau falsch ist. Wenn Sie nicht-numerische Werte haben, könnten Sie sich ausdrücklich Ihren Wert vor dem Parsen Abstreifen wie unten über einen Regex.Replace() Aufruf gesehen:

// Remove all non-numeric data via a Regular Expression 
var cleanedPrice = Regex.Replace(lbl_total_price.Text,@"[^\d]",""); 
total_cost += Convert.ToInt16(cleanedPrice); 

Schließlich, wenn Sie mit einem Preis arbeiten und eigentlich nicht haben integer-Daten wie Dezimalstellen, könnten Sie einfach den Wert als Decimal oder double Parsen:

total_cost += Convert.ToDecimal(cleanedPrice); 

oder

total_cost += Convert.ToDouble(cleanedPrice); 
Verwandte Themen