找回密码
 立即注册

QQ登录

只需一步,快速开始

oreoconan

中级会员

6

主题

13

帖子

631

积分

中级会员

积分
631

活字格认证

最新发帖
oreoconan
中级会员   /  发表于:2014-3-28 17:59  /   查看:5270  /  回复:3
版主,你好
又一次见面啦

这两天在研究FpSpread控件单元格Double数据类型校验问题
控件版本号:6.0.2002.2008

我是从RegExpCellType类继承下来,利用正则表达式检验double类型小数点后位数
代码如下:
namespace AmiFpSpread
{
[Serializable]
    internal class ValidDoubleCellType : RegExpCellType
    {
        public ValidDoubleCellType(NumberFormatInfo nfi)
            : base()
        {
            this.NumberFormat = nfi;

            //设置ValidationExpression
            if (this.NumberFormat != null && this.NumberFormat.NumberDecimalDigits == 0)
            {
                this.ValidationExpression = @"^(0|-?[1-9][0-9]*)$";
            }
            else
            {
                this.ValidationExpression = @"^(0|-?[1-9][0-9]*)$|^(0|-?[1-9][0-9]*)(.[0-9]{1," + this.NumberFormat.NumberDecimalDigits.ToString() + @"})?$";
            }

            //设置ErrorMessage
            string format = "Doubleex, {0})";
            switch (this.NumberFormat.NumberDecimalDigits)
            {
                case 0: base.ErrorMessage = string.Format(format, "1234"); break;
                case 2: base.ErrorMessage = string.Format(format, string.Format("1234{0}56", this.NumberFormat.NumberDecimalSeparator)); break;
                case 4: base.ErrorMessage = string.Format(format, string.Format("1234{0}5678", this.NumberFormat.NumberDecimalSeparator)); break;

                default: base.ErrorMessage = string.Format(format, "1234.56,d"); break;
            }

        }

        public override string ValidateEditorValue(object value)
        {
            string str = null;
            if (value != null)
            {
                if (value.ToString().Length <= 0)
                {
                    return str;
                }
                Regex regex = new Regex(this.ValidationExpression);
                if (!regex.Match(value.ToString()).Success)
                {
                    return this.ErrorMessage;
                }
            }

            return str;
        }

        public override object Parse(string s)
        {
            if ((s == null) || (s.Length == 0))
            {
                return null;
            }
            try
            {
                NumberFormatInfo numberFormat = this.NumberFormat;
                if (numberFormat == null)
                {
                    return double.Parse(s, NumberStyles.Any);
                }
                return double.Parse(s, NumberStyles.Any, (IFormatProvider)numberFormat);
            }
            catch
            {
                return s;
            }
        }

        public override string Format(object obj)
        {
            if ((obj == null) || (obj.ToString().Length == 0))
            {
                return string.Empty;
            }

            string str = null;
            try
            {
                if (this.NumberFormat != null)
                {
                    str = Convert.ToDouble(obj).ToString("N", this.NumberFormat) ?? "";
                    if (str == null || str.Length <= 0)
                    {
                        return str;
                    }
                    int num = 0;
                    int num2 = str.Length - 1;
                    int num3 = str.IndexOf(this.NumberFormat.NumberDecimalSeparator);
                    if (num3 >= 0)
                    {
                        num2 = num3 + this.NumberFormat.NumberDecimalDigits;
                        while ((num2 > num3) &amp;&amp; (str[num2] == '0'))
                        {
                            num2--;
                            num++;
                        }
                    }
                    if ((num == this.NumberFormat.NumberDecimalDigits) &amp;&amp; (num > 0))
                    {
                        num2--;
                        num++;
                    }
                    return (str.Substring(0, num2 + 1) + str.Substring((num2 + 1) + num));
                }

                return obj.ToString();
            }
            catch
            {
                return obj.ToString();
            }
        }

        public override bool Deserialize(System.Xml.XmlNodeReader r)
        {
            return true;
        }
    }
}

页面查看时第一次运行效果正常
第二次运行会报错

报错信息如下:

1.jpg (162.76 KB, 下载次数: 293)

3 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2014-4-1 15:46:00
沙发
回复 1楼oreoconan的帖子

嘻嘻, 报错的问题。

请给提供一个完整的demo, 在哪个浏览器下报错的?
回复 使用道具 举报
oreoconan
中级会员   /  发表于:2014-4-3 15:51:00
板凳
回复 1楼oreoconan的帖子

嘻嘻, 报错的问题。

请给提供一个完整的demo, 在哪个浏览器下报错的?
roger.wang 发表于 2014-4-1 15:46:00


demo给不了唉
浏览器是IE8

另外,我今天设置边框还碰到个问题
比如相邻的2个单元格
我设置了左边单元格右边框类型是solid
设置右边单元格左边框是无
出来的效果是这条相交的边框是无

是不是可以推论得出
要设置边框样式必须在相邻单元格里都设置才起效?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-3 16:18:00
地板
回复 3楼oreoconan的帖子

是的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部