dataGridView1 中 某项 是 数据库 中的 number 类型  如何在将其 由全角 转换为 半角通过 校验 将 其转换为半角了 却报错   数据类型 错误 
temp=int.Parse("12");
dataGridView1.CurrentRow.Cells["确认单价"].Value = temp;  temp 为 数字型 

解决方案 »

  1.   

    你写个方法判断下如果是全角Replace成半角的不就好了?
      

  2.   

            /// <summary>
            /// 将全角空格转化为半角空格
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            public static string ToBjForSpace(string s)
            {
                if (s == null || s.Trim() == string.Empty)
                {
                    return s;
                }
                else
                {
                    StringBuilder sb = new StringBuilder(s.Length);
                    for (int i = 0; i < s.Length; i++)
                    {
                        if (s[i] == '\u3000')
                        {
                            sb.Append('\u0020');
                        }
                        else
                        {
                            sb.Append(s[i]);
                        }
                    }
                    return sb.ToString();
                }
            }        /// <summary>
            /// 将字符串中的全角字符转换为半角
            /// </summary>
            /// <param name="s"></param>
            /// <returns></returns>
            public static string ToBj(string s)
            {
                if (s == null || s.Trim() == string.Empty)
                {
                    return s;
                }
                else
                {
                    StringBuilder sb = new StringBuilder(s.Length);
                    for (int i = 0; i < s.Length; i++)
                    {
                        if (s[i] == '\u3000')
                        {
                            sb.Append('\u0020');
                        }
                        else if (IsQjChar(s[i]))
                        {
                            sb.Append((char)((int)s[i] - 65248));
                        }
                        else
                        {
                            sb.Append(s[i]);
                        }
                    }
                    return sb.ToString();
                }
            }
      

  3.   


    1using System;
     2using System.Runtime.InteropServices;
     3
     4namespace MyDemo
     5{ 
     6    public static class clsIme
     7    {
     8        //声明一些API函数
     9        [DllImport("imm32.dll")]
    10        public static extern IntPtr ImmGetContext(IntPtr hwnd);
    11        [DllImport("imm32.dll")]
    12        public static extern bool ImmGetOpenStatus(IntPtr himc);
    13        [DllImport("imm32.dll")]
    14        public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);
    15        [DllImport("imm32.dll")]
    16        public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
    17        [DllImport("imm32.dll")]
    18        public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);
    19        public const int IME_CMODE_FULLSHAPE = 0x8;
    20        public const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11;
    21        //重载SetIme,传入Form
    22        public static void SetIme(Form frm)
    23        {
    24            frm.Paint += new PaintEventHandler(frm_Paint);
    25            ChangeAllControl(frm);
    26        }
    27        //重载SetIme,传入Control
    28        public static void SetIme(Control ctl)
    29        {
    30            ChangeAllControl(ctl);
    31        }
    32        //重载SetIme,传入对象句柄
    33        public static void SetIme(IntPtr Handel)
    34        {
    35            ChangeControlIme(Handel);
    36        }
    37        private static void ChangeAllControl(Control ctl)
    38        {
    39            //在控件的的Enter事件中触发来调整输入法状态
    40            ctl.Enter += new EventHandler(ctl_Enter);
    41            //遍历子控件,使每个控件都用上Enter的委托处理
    42            foreach (Control ctlChild in ctl.Controls)
    43                ChangeAllControl(ctlChild);
    44        }
    45
    46        static void frm_Paint(object sender, PaintEventArgs e)
    47        {
    48            /**//*有人问为什么使用Pain事件,而不用Load事件或Activated事件,是基于下列考虑:
    49             * 1、在您的Form中,有些控件可能是运行时动态添加的
    50             * 2、在您的Form中,使用到了非.NET的OCX控件
    51             * 3、Form调用子Form的时候,Activated事件根本不会触发 */
    52            ChangeControlIme(sender);
    53        }
    54        //控件的Enter处理程序
    55        static void ctl_Enter(object sender, EventArgs e)
    56        {
    57            ChangeControlIme(sender);
    58        }
    59        private static void ChangeControlIme(object sender)
    60        {
    61            Control ctl = (Control)sender;
    62            ChangeControlIme(ctl.Handle);
    63        }
    64        //下面这个函数才是真正检查输入法的全角半角状态
    65        private static void ChangeControlIme(IntPtr h)
    66        {
    67            IntPtr HIme = ImmGetContext(h);            
    68            if (ImmGetOpenStatus(HIme))  //如果输入法处于打开状态
    69            {
    70                int iMode = 0;
    71                int iSentence = 0;
    72                bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);  //检索输入法信息
    73                if (bSuccess)
    74                {
    75                    if ((iMode & IME_CMODE_FULLSHAPE) > 0)   //如果是全角
    76                        ImmSimulateHotKey(h, IME_CHOTKEY_SHAPE_TOGGLE);  //转换成半角
    77                }
    78            }
    79        }
    80    }
    81}
    然后在Load的时候,在里面加上这样一句话:
          clsIme.SetIme(this);这样就不会输入全角了
      

  4.   

    在 dataGridView1.CurrentRow.Cells["确认单价"].Value  这项中 输入 全角 23数据库中这项 为 number  型 光标 离开此项 即 报错  数据类型 错误 
      

  5.   

    CellValidating事件里检查下看看 
      

  6.   

    回 5 楼:这个方法我试过啦 不行, 同样会抱错,CellValidating 先进行 校验, 可转换成半角后的数据没有立刻返给   dataGridView1.CurrentRow.Cells["确认单价"].Value  而是先进行数据库 校验 发现 dataGridView1.CurrentRow.Cells["确认单价"].Value  类型与 数据库中 number  对应不上  进行 抱错如果没有抱错 那么 下一步 则能给 dataGridView1.CurrentRow.Cells["确认单价"].Value 传递转换成半角后的数据