2011-03-14 144 views
1

请查看下面的代码,告诉我哪里出错了。列不允许有空值

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没有任何行,我需要在页脚中显示一个新行,控制已经在页脚添加。我的插入更新和添加新进程都是从网格本身执行的。

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

[更新]

我不是retriving查询主键。只有表格的可编辑部分。

+0

您是否在允许所有空值后重新输入已输入的数据集? – 2011-03-14 10:18:15

+0

其实我的方法是返回数据表...所以我需要总和的方式把检查放在返回表 – 2011-03-14 10:21:04

回答

3

当您填充数据集时,您可能需要阅读架构信息。我不确定这是否会解决您的问题,但我怀疑它会。没有模式,你的数据表不知道该列是否接受null。

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

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

+0

我没有检索主键在我的查询....只有可编辑columsn – 2011-03-14 10:19:40