C#,WinForms,DataGridView,DataTable。我的表单允许用户将数据输入到新行中(而不是弹出记录的单个记录视图)。当用户单击“保存”按钮时,单击事件如下所示:
DataTable dtAddRows = this.SomeFictitiouslyNamedDataSet.SomeFictitiouslyNamedDataTable.GetChanges(DataRowState.Added);
我的假设是,使用该枚举调用GetChanges将获得一组在运行时添加到网格中的行。但是,由于其中一列" Last_Updated_DT" (必须显示和只读)是一个日期列,当我们写入数据表时将填充该列。但是,DataSet有一个规则,即此列不能为空。
问题是,我得到一个错误,表明Last_Updated_DT列实际上是空的(惊喜)。它是一个新行,并且该列在网格中是只读的,因此它当然是null。
在实际尝试获取添加的行之前,如何解决此错误或在该列的那些(或那些)行中填充值?
答案 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提示提供必要的指导。