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

时间:2011-03-10 12:50:16

标签: c# .net winforms .net-3.5 binding

我在表单上有一个带有数字字段的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);
    }
}

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

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

2 个答案:

答案 0 :(得分:7)

实际上你可以允许NULL值,但是你必须在代码中添加额外的解析:

binding.Parse += new ConvertEventHandler(ParseNumeric);

其中ParseNumeric具有以下形式:

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

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

答案 1 :(得分:4)

默认情况下,double是一个不可为空的字段。所以即使你把null放在里面也会变成0。

您需要将列数据类型更改为double?。双?是nullable type

<强>更新

进一步查看,键入的数据集不支持可空类型。

解决方案是使用'loose'类型(IE:object),但是你必须检查它以确保输入有效。

我测试了你的样品并将其更改为对象,允许我清空盒子。