我有一个使用 datasource 属性从数据表中填充的 datagridview。我需要在不影响数据库的情况下更改单元格的值。到目前为止,我只能发现我必须首先更改数据绑定项目,但没有关于如何做到这一点的信息。此外,我不想更改数据绑定项。
想要这样做的原因是我有一个包含开始时间和结束时间的记录列表,并且有一个计算字段以秒为单位给出差异。我需要改变计算域的值,并相应地改变行的高度,即每行的高度与它所代表的持续时间成正比。更改是从文本框中完成的,如果“增加”按钮被按住,该文本框会快速增加,因此我无法在每次增加时更改数据库。相反,我会经常更改表中的值,并在增量停止后更新数据库。
我尝试使用以下代码直接更新 datagridview:
dgvTasks.Rows(SelectedRowIndex).Cells(5).Value = DateAdd(DateInterval.Minute, DateDiff(DateInterval.Minute, CDate("00:00:00"), CDate(txtDuration.Text & ":00")), dgvTasks.Rows(SelectedRowIndex).Cells(4).Value)
但收到错误:
System.Data.ReadOnlyException:列 'Column1' 是只读的。
我还尝试更新数据表,并允许更新计算列:
dtblTasks.Rows(SelectedRowIndex)(5) = DateAdd(DateInterval.Minute, DateDiff(DateInterval.Minute, CDate("00:00:00"), CDate(txtDuration.Text & ":00")), dtblTasks.Rows(SelectedRowIndex)(4))
dgvTasks.DataSource = dtblTasks
但计算值不会改变。
我还提供了一个额外的计算值(在 SQL 中),我在其中找到了以分钟为单位的差异,并将字符串文字附加到该值:
( CAST ( DATEDIFF(MINUTE, Tasks.TaskStart, Tasks.TaskEnd) AS NVARCHAR(10) ) + ' mins') AS TaskDurationString
有没有办法将网格与数据源分离,但仍保持数据在数据网格中可见并对其进行操作(不影响数据绑定对象)?或者也许是解决这个问题的其他方法?