Winform窗体程序中,我有若干个TextBox双向绑定到数据库某个表中的几个int字段,这几个字段都允许空。当我通过程序修改某一条记录时,假设之前TextBox中有值,此时我想删除其值进行保存(即希望数据库此记录字段为空),控件失去焦点时触发默认绑定校验失败,光标不可移出TextBox。请教大家,在这种情况下,我应该如何将此字段置空?

解决方案 »

  1.   

    为对应的Binding对象增加Format事件和Parse事件处理方法。
      

  2.   

    Binding bind = new Binding("Text", bindsourse, name, true, DataSourceUpdateMode.OnValidation, DBNull.Value);
                                tb.DataBindings.Add(bind);
                                bind.DataSourceNullValue = DBNull.Value;
                                if (((System.Data.DataView)bindsourse.DataSource).Table.Columns[name].DataType.FullName == "System.Decimal")
                                {
                                    //下面两句用于处理数值型字段绑定无法设置空值问题
                                    bind.Format += new ConvertEventHandler(bind_Format);
                                    bind.Parse += new ConvertEventHandler(bind_Parse);
                                }
      

  3.   


    Binding bind = new Binding("Text", bindsourse, name, true, DataSourceUpdateMode.OnValidation, DBNull.Value);
                                tb.DataBindings.Add(bind);
                                bind.DataSourceNullValue = DBNull.Value;
                                if (((System.Data.DataView)bindsourse.DataSource).Table.Columns[name].DataType.FullName == "System.Decimal")
                                {
                                    //下面两句用于处理数值型字段绑定无法设置空值问题
                                    bind.Format += new ConvertEventHandler(bind_Format);
                                    bind.Parse += new ConvertEventHandler(bind_Parse);
                                }
    void bind_Format(object sender, ConvertEventArgs e)//绑定控件时发生
            {
                if (e.Value == DBNull.Value)
                    e.Value = "";
            }
            void bind_Parse(object sender, ConvertEventArgs e)//控件值更改时发生
            {
                if (e.Value.ToString() == "")
                    e.Value = DBNull.Value;
            }