无法使用DataGridView和DataTable插入Null的值

时间:2015-10-05 22:43:49

标签: c# sql-server checkbox datagridview

我正在将DataGridView控件与DataTable结合使用来编辑SQL表。我有两个表的字段是Checkboxes绑定到名为bit not nullacoustic的{​​{1}} SQL列。当我添加新行并取消选中hud列时,我会收到以下错误消息。我将hud列设置为什么并不重要。如果我检查acoustic列,但未选中hud列,则可以正常使用。

  

无法将值NULL插入列'hud',表'rawVinyl';列不允许空值。 INSERT失败。

该表的定义是:

acoustic

这是设计器为我遇到问题的复选框生成的代码。 CREATE TABLE rawVinyl ( storesId nvarchar(12) NOT NULL, baseColor nvarchar(50) NOT NULL, shadeColor nvarchar(50) NULL, rollWidth float NOT NULL, shadeHeight float NULL, acoustic bit NOT NULL, hud bit NOT NULL ) 列的代码与更改的名称完全相同。

acoustic

填充DataGridView的代码是

private System.Windows.Forms.DataGridViewCheckBoxColumn hud;
...
this.hud = new System.Windows.Forms.DataGridViewCheckBoxColumn();
...
this.hud.DataPropertyName = "hud";
this.hud.HeaderText = "H.U.D.";
this.hud.Name = "hud";
this.hud.Width = 46;

最后但并非最不重要的是,保存更改的代码是:

private const string selectQuery = "SELECT storesId, baseColor, shadeColor, rollWidth, shadeHeight, acoustic, hud FROM rawVinyl ORDER BY storesId";
...
DataTable tbl = new DataTable();
using( SqlDataAdapter data = new SqlDataAdapter(selectQuery, Global.ConnectionString) )
{
    data.Fill(tbl);
    bindingSource1.DataSource = tbl;
}

我还尝试按如下方式设置Checkbox列的默认值,但它没有区别:

DataTable tbl = bindingSource1.DataSource as DataTable;
DataTable changes = tbl.GetChanges();
if( changes != null )
{
    using( SqlDataAdapter sda = new SqlDataAdapter(selectQuery,Global.ConnectionString) )
    using( SqlCommandBuilder scb = new SqlCommandBuilder(sda) )
    {
        sda.UpdateBatchSize = 0; // do it all at once.
        sda.Update(changes);
        tbl.AcceptChanges();
    }
}

我不明白的主要原因是我为什么不在this.hud.FalseValue = false; this.hud.IndeterminateValue = false; this.hud.TrueValue = true; 列中遇到此问题?

1 个答案:

答案 0 :(得分:1)

You can set DataColumn.DefaultValue of acoustic and hud.

tbl.Columns["acoustic"].DefaultValue = false;
tbl.Columns["hud"].DefaultValue = false;

Maybe in SQL server you have already set acoustic default value so the error appears only for hud field.