2011-03-10 84 views
2

我有一個窗體上的數字字段的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); 
    } 
} 

這是一個全新的.NET 3.5的形式項目在Visual Studio 2008中我添加了兩個文本框的形式。

我的實際應用程序以不同的方式生成數據集,但它具有相同的行爲。綁定到數據表的數字列允許空值。

+0

你能插入處理程序的代碼,你檢查/顯示文本框的值嗎? thx – swissben 2011-03-10 13:13:30

+1

沒有處理程序 - 請參閱我的更新後的帖子我創建了一個簡單的表單winforms應用程序來演示問題。 – 2011-03-10 13:41:03

回答

7

其實你可以允許空值,但是你必須要額外的解析添加到代碼:

binding.Parse += new ConvertEventHandler(ParseNumeric); 

其中ParseNumeric有以下形式:

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

對於我這個代碼允許文本框中的空文本,然後由數據庫中的空值表示。

4

默認情況下double是不可空字段。所以即使你把一個空值也會變爲0.

你需要改變列的數據類型爲double ?.雙?是 nullable type

UPDATE

經進一步看,類型化數據集不支持可空類型。

解決方案是使用「鬆散」類型(IE:對象),但您必須檢查它以確保輸入有效。

我用您的樣品進行了測試,並將其更改爲物件,以允許我清空箱子。

+0

如果我將示例代碼更改爲typeof(Double?),我會得到一個「DataSet不支持System.Nullable <>」。例外 – 2011-03-10 13:44:32

+0

我更新了我的答案。 – 2011-03-10 14:25:12

相關問題