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

C# 当绑定到数据表中的数字字段时,如何允许空值?,c#,.net,winforms,.net-3.5,binding,C#,.net,Winforms,.net 3.5,Binding,我有一个winforms应用程序,表单上有一个数字字段。这开始为空,然后如果我将其设置为一个数字,更改焦点,然后再次清除文本框更改回以前输入的数字。如果我将数字(例如从4更改为5)正确更新,但我希望用户能够清除输入的内容 下面是一些演示此行为的示例代码: public partial class Form1 : Form { DataTable table = new DataTable("TableName"); public Form1() { Dat

我有一个winforms应用程序,表单上有一个数字字段。这开始为空,然后如果我将其设置为一个数字,更改焦点,然后再次清除文本框更改回以前输入的数字。如果我将数字(例如从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);
    }
}
这是VisualStudio2008中一个全新的.NET3.5Forms项目。我在表单中添加了两个文本框


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

默认情况下,double是不可为空的字段。因此,即使您在其中输入null,它也将更改为0

您需要将列数据类型更改为double?。双重的这是一个很好的例子

更新

进一步看,类型化数据集不支持可为空的类型

一个解决方案是使用“松散”类型(即:object),但是您必须检查它以确保输入有效


我使用您的示例进行了测试,并将其更改为object允许我清空该框。

事实上,您可以允许空值,但是您必须为代码添加额外的解析:

binding.Parse += new ConvertEventHandler(ParseNumeric);
其中,ParseNumeric具有以下形式:

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

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

请在检查/显示文本框值的位置插入处理程序的代码,好吗?THX这里没有处理程序-请参阅我更新的帖子我创建了一个简单的单表单winforms应用程序来演示这个问题。如果我将示例代码改为typeof(Double?),我会得到一个“DataSet不支持System.Nullable.”异常