2012-10-06 76 views
0

在一个C#窗体窗体类中,我绑定了像这样的文本框。textbox百分比格式化和非格式化

this.textMargin.DataBindings.Add(new Binding("Text", dt, "Margin", true, DataSourceUpdateMode.OnValidation, 0, "P")); 

这适用于显示文本框“textMargin”为百分比。但是,当我的文本框的值传递给我的更新语句,我得到即使我试图用Decimal.Parse这样的字符串格式错误:

decimal testconvert = Decimal.Parse(this.textMargin.Text); 

我想传递的价值'100%',但它需要提交回数据库为1.

这里有什么秘诀?

感谢

回答

4

尝试

string textMargin = this.textMargin.Text.EndsWith("%") ? this.textMargin.Text.Replace("%","") : this.textMargin.Text; 

decimal testconvert = Decimal.Parse(textMargin)/100; 
+0

适合我!谢谢你的时间。 – Ryan

+0

+1为条件运算符 – Kinected

0

正如你可以看到Decimal.Parse将不接受非数字值,但你可以使用一个简单的算法如下面摆脱非数字:

public static string RemoveNonDigits(string s) 
    { 
     string newS = ""; 
     if (s.Length == 0) return newS; 
     for (int i = 0; i < s.Length; i++) 
     { 

      if (Char.IsDigit(s[i]) || s[i] == '.') 
       newS += s[i]; 

      else if (!Char.IsDigit(s[i])) 
      { 
       newS += ""; 
      } 

      return newS; 
     } 

然后就可以调用

Decimal percent = Decimal.Parse(RemoveNonDigits(textMargin.Text.ToString())); 
+0

这些作品无论是用' “100%”'。发帖前请先测试。 – Oded

+0

@Oded Check edits – Kinected

+0

'Decimal.Parse'将接受一个不是数字的'.'。 – Oded

1

%不是小数的有效部分,并且不能由Decimal.Parse进行解析。

在解析之前,您需要将其清除出字符串。

2

这应该适用于您,使用decimal.TryParse来避免错误,并且String.Replace可以删除您的%。

decimal.TryParse(this.textMargin.Text.Replace("%", ""), out testconvert); 
testconvert = testconvert/100;