0

在 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

4 回答 4

4

尝试

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

decimal testconvert = Decimal.Parse(textMargin) / 100;
于 2012-10-06T21:16:31.017 回答
2

这应该对你有用,使用decimal.TryParse避免错误和String.Replace删除你的 %。

decimal.TryParse(this.textMargin.Text.Replace("%", ""), out testconvert);
testconvert = testconvert / 100;
于 2012-10-06T20:13:58.753 回答
1

%不是小数的有效部分,不能被 解析Decimal.Parse

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

于 2012-10-06T19:48:47.197 回答
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()));
于 2012-10-06T19:48:37.753 回答