列不允许空值

时间:2011-03-14 10:09:08

标签: c# asp.net sql-server ado.net datatable

请查看下面的代码并告诉我哪里出错了。

case "particulars.aspx":
   dt = JobCardManager.GetParticularsByJobId(id);
   hidJobId.Value = id.ToString();
   if (dt != null && dt.Rows.Count > 0)
   {
      gvParticulars.DataSource = dt;
      gvParticulars.DataBind();
   }
   else
   {
      **dt.Rows.Add(dt.NewRow());**
      gvParticulars.DataSource = dt;
      gvParticulars.DataBind();

      int TotalColumns = gvParticulars.Rows[0].Cells.Count;
      gvParticulars.Rows[0].Cells.Clear();
      gvParticulars.Rows[0].Cells.Add(new TableCell());
      gvParticulars.Rows[0].Cells[0].ColumnSpan = TotalColumns;
      gvParticulars.Rows[0].Cells[0].Text = "No Record Found";
   }

   ddlJobs.Enabled = false;
   gvParticulars.ShowFooter = true;
   break;

我想要实现的是,如果dt没有任何行,我需要在页脚中显示一个新行,控件已经添加到页脚中。我的插入更新和添加新进程都是从网格本身执行的。

因此,如果我的数据表为空,那么在星号行中,我收到错误,“列不允许为空”。在数据库中所有列都有Allow Null复选框被选中。请帮忙。

[更新]

我没有在查询中检索主键。只有表格的可编辑部分。

2 个答案:

答案 0 :(得分:2)

您可能希望在填充数据集时阅读架构信息。我不确定这是否会解决你的问题,但我怀疑它会解决。如果没有模式,您的数据表将无法知道列是否接受null。

da.FillSchema(ds, SchemaType.Source);
da.Fill(ds);

答案 1 :(得分:0)

只是一个猜测,但是所有列都不能为空,那么定义为主键的列呢?