vb.net - 如果 DataRow 存在于 DataTable 中,则更新其中的值
问题描述
每次用户更改我的 DataGridView 中一个可编辑列中的值时,都会触发最多 8 个字段的重新计算。这意味着 DataGridView 上的事件 CellValueChanged 事件将触发超过 1 次。
我想在 DataSet.DataTable 中创建一行,其中包含用户更改值后所有列的新值。
我遇到的问题是,下面的代码为由于重新计算的列而改变其值的每一列创建一行。
Private Sub PL_DGV_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles PL_DGV.CellValueChanged
If isLoaded Then
Dim grid_row As DataRow = Me.DataSet.PL.Rows(e.RowIndex)
Dim unsaved_row As DataRow = grid_row
Me.DataSet.PL_UnsavedChanges.ImportRow(unsaved_row)
unsaved_changes = True
End If
End Sub
我怎样才能做到这一点,如果一行已经存在,它每次都会更新其中的值?
DataSet 中没有为 DataTable 分配 PrimaryKey,但有 3 列将用作每行的唯一值。
[根据评论更新]
使用上面显示的代码,用户将更新第 1 列中的值 >
触发事件并创建新行,其中将包含第 1 列中的新值 >
第 2 列根据第 1 列的变化重新计算 >
触发事件并创建新行,其中将包括第 1 列和第 2 列中的新值 >
第 3 列是根据前面提到的任一列的更改重新计算的 >
触发事件并创建新行,其中将在第 1 列、第 2 列和第 3 列中包含新值。
我想要实现的是有 1 行将包含所有新值,不需要生成任何其他行,但需要生成包含用户操作的更改和基于此的任何重新计算的行。
解决方案
在评论中的讨论之后,我的问题的解决方案,或者更确切地说,我为克服它所做的事情如下:
Dim grid_row As DataRow = Me.DataSet.PL.Rows(e.RowIndex)
Dim Column1 = Variable1
Dim Column2 = grid_row.Item("Column2").ToString().Trim()
Dim Column3 = grid_row.Item("Column3").ToString().Trim()
Dim Updated_column_name = Me.DataSet.PL.Columns(e.ColumnIndex).ColumnName
Dim Updated_value = grid_row.Item(Updated_column_name).ToString()
Dim row As DataRow = Me.DataSet.PL_ChangesLog.NewRow()
row("price_list") = Price_list
row("warehouse") = Warehouse
row("product_code") = Product
row("column_name") = Updated_column_name
row("updated_value") = Updated_value
row("timestamp") = DateTime.Now()
row("username") = Environment.UserName()
Me.DataSet.PL_ChangesLog.Rows.Add(row)
unsaved_changes = True
这使我可以创建一个 DataTable,为每个已更新其值的单元格保存一行数据,无论是通过代码还是通过用户操作重新计算。
基于此,我可以选择最后一次审计并将其用作“保存更改”以将更改提交到 SQL 数据库。
推荐阅读
- asp.net - 如何使用IIS作为多租户应用的网关,根据子域转发到不同的服务器
- java - 有没有办法用单个实体返回检查 JPA 方法,它们只使用具有唯一约束的列?
- spring - 出现错误时如何重试kafka消息-spring cloud stream
- http - 如何使用 Nginx 在 AWS ec2 上强制从 http 重定向到 https
- sql - 我想将此数据从 Json 文件插入到带有关系(外键)的 Sql 表中的多个表中,并将所有数据链接到一个主表
- python - 自定义转换器未通过列表
- spring - SpringBoot:无法使用 maven 创建耳朵:无法推断布局
- vertica - vertica 复制命令在 vertica shell 中工作,但不使用 vertica-python 游标
- python - QuantLib:交换到零息曲线自举
- r - 在R中的条件ifelse上添加上下标