2010-09-08 21 views
0

J'essaie de convertir une chaîne obtenue à partir d'une base de données locale en décimal, mais il en résulte un "Impossible de convertir implicitement Type 'GlobalCurrencyConverter.CurrencyRateDataSet.rateDataTable' en décimal".Chaîne de conversion en décimal

Voici mon code,

protected decimal calRate_Click(object sender, EventArgs e) 
{ 
    CurrencyRateDataSetTableAdapters.rateTableAdapter rateTable; 
    decimal exRate = (decimal)rateTable.GetDataBySourceTargetCurrency(objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue); 
    decimal exAmt = 0; 
    exAmt = (decimal)Convert.ToDecimal(objTextBoxSourceAmt.Text); 
} 

Mise à jour:

rateTable.getDataBySourceTargetCurrency est une méthode créée dans Designer Visual Studio. Il prend en compte 2 paramètres et effectue une recherche dans la base de données locale, renvoyant une seule ligne (et une seule colonne) de valeur.

+1

pouvez-vous le code de cette méthode rateTable.GetDataBySourceTargetCurrency() – TalentTuner

+1

Qu'est-ce que le retour rateTable.GetDataBySourceTargetCurrency? – recursive

+1

Son retournant probablement un datatable puis avec une seule colonne et une rangée, essayez d'accéder à la valeur dedans plus spécifiquement comme (rate) rateTable.GetDataBySourceTargetCurrency (objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue) [0] [0]; – w69rdy

Répondre

0

Si "rateTable.GetDataBySourceTargetCurrency (objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue)" est en fait une chaîne (à partir de votre titre), essayez Decimal.TryParse():

// des questions ci-dessus ... Juste remarqués si rateTable.GetDataBy ... ne retourne pas une chaîne, vous devez créer une chaîne de quel objet il ne retourne, puis utilisez TryParse()

Decimal exRate; 
String exRateString = rateTable.GetDataBySourceTargetCurrency(objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue); 

bool convertSuccessful = Decimal.TryParse(exRateString, out exRate); 
if (convertSuccessful == true) 
{ 
    // do some stuff here 
} 
else 
{ 
    // report error 
} 
0

Essayez ceci:

public static class StringUtils 
{ 
    public static string ToCurrency(decimal value) 
    { 
     return value.ToString("C"); 
    } 

    public static decimal FromCurrency(string value) 
    { 
     return decimal.Parse(value, NumberStyles.Currency); 
    } 

    public static decimal? FromCurrency(string value, decimal? defaultValue) 
    { 
     decimal num; 
     if(decimal.TryParse(value, NumberStyles.Currency, null, out num)) 
      return num; 
     return defaultValue; 
    } 
} 

à partir duquel vous pouvez le faire:

decimal exAmt = StringUtils.FromCurrency(objTextBoxSourceAmt.Text,0);