DataTable.GetChanges(DataRowState.Added)失败并显示空值

时间:2016-07-07 19:18:24

标签: c# winforms datagridview datatable

C#,WinForms,DataGridView,DataTable。我的表单允许用户将数据输入到新行中(而不是弹出记录的单个记录视图)。当用户单击“保存”按钮时,单击事件如下所示:

DataTable dtAddRows = this.SomeFictitiouslyNamedDataSet.SomeFictitiouslyNamedDataTable.GetChanges(DataRowState.Added);

我的假设是,使用该枚举调用GetChanges将获得一组在运行时添加到网格中的行。但是,由于其中一列" Last_Updated_DT" (必须显示和只读)是一个日期列,当我们写入数据表时将填充该列。但是,DataSet有一个规则,即此列不能为空。

问题是,我得到一个错误,表明Last_Updated_DT列实际上是空的(惊喜)。它是一个新行,并且该列在网格中是只读的,因此它当然是null。

在实际尝试获取添加的行之前,如何解决此错误或在该列的那些(或那些)行中填充值?

1 个答案:

答案 0 :(得分:1)

为了子孙后代:

private void myGrid_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
    e.Row.Cells["MyColumnNameGridViewTextBoxColumn1"].Value = String.Empty;
}

将该事件添加到我的代码中解决了我的问题。我将值设置为String.Empty,因此在点击“保存”之前,它不会在列中放置日期/时间值。

然后,在Save_Click事件中,我使用以下代码获取添加的行:

DataTable dtAddedRows = this.dsMyDataSet.MyDataTable.GetChanges(DataRowState.Added);

然后,在TableAdapter.Insert参数列表中,我为日期参数添加了DateTime.Now

最终使用MyTableAdapter.Update重载调用DataSet方法。

全部修复。

向@KiNeTiC提示提供必要的指导。