绑定到数据表中的数字字段时如何允许空值?

Ada*_*ler 2 .net c# binding .net-3.5 winforms

我在表单上有一个带有数字字段的winforms应用程序.这开始为null然后如果我将其设置为数字,更改焦点然后再次清除文本框更改回先前输入的数字.如果我更改数字,例如.从4到5它正确更新但我希望用户能够清除已输入的内容.

以下是一些演示此行为的示例代码:

public partial class Form1 : Form
{
    DataTable table = new DataTable("TableName");
    public Form1()
    {
        DataColumn column = new DataColumn("NumericColumnName", typeof(Double));
        column.AllowDBNull = true;
        table.Columns.Add(column);
        object[] rowData = new object[1];
        rowData[0] = DBNull.Value;
        table.Rows.Add(rowData);

        InitializeComponent();

        BindingSource bindingSource = new BindingSource();
        bindingSource.DataSource = table;
        Binding binding = new Binding("Text", bindingSource, "NumericColumnName");
        textBox1.DataBindings.Add(binding);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是Visual Studio 2008中一个全新的.net 3.5表单项目.我在表单中添加了两个文本框.

我的实际应用程序生成数据集的方式不同,但它具有相同的行为.对数据表的数字列的绑定是否允许空值.

小智 7

实际上,您可以允许NULL值,但是您必须在代码中添加其他解析:

binding.Parse += new ConvertEventHandler(ParseNumeric);
Run Code Online (Sandbox Code Playgroud)

其中ParseNumeric具有以下形式:

private void ParseNumeric(object sender, ConvertEventArgs e)
{
    if(e.Value.Equals(""))
        e.Value = DBNull.Value;
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这段代码允许在文本框中使用空文本,然后在数据库中用NULL值表示.