textbox%格式化和取消格式化

时间:2012-10-06 19:46:26

标签: c# winforms

在C#windows表单类中,我绑定了这样的文本框。

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 个答案:

答案 0 :(得分:4)

尝试

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

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

答案 1 :(得分:2)

这应该适合您,使用decimal.TryParse来避免错误,String.Replace删除您的%。

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

答案 2 :(得分:1)

%不是小数的有效部分,无法由Decimal.Parse解析。

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

答案 3 :(得分: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()));