我在表单上有一个带有数字字段的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表单项目。我在表单中添加了两个文本框。
我的实际应用程序以不同方式生成数据集,但它具有相同的行为。对数据表的数字列的绑定是否允许空值。
答案 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),但是你必须检查它以确保输入有效。
我测试了你的样品并将其更改为对象,允许我清空盒子。