【问题标题】:Move rows from DataTableA to DataTableB with update to Datarow将行从 DataTableA 移动到 DataTableB 并更新到 Datarow
【发布时间】:2019-08-01 12:55:44
【问题描述】:

我的应用程序有两个列表视图 L1 和 L2,分别由数据表 D1 和 D2 界定。每个 Datatable 有 5 列,顺序和名称相同,在 Column1 上有一个 primaryKey。我希望能够通过与应用程序上的 L1 和 L2 的行单击交互来编辑有界数据表;具体来说,如果用户点击 L1 上的一行(fullrowselect = True):

  1. 从 L1 获取 DataRow R1
  2. 将 R1 的 PromaryKey 值编辑为等于 1 + Max(L2.col1) 以确保唯一性 - 生成 R1X
  3. 从 L1 中删除原来的 R1
  4. 将 R1X 添加到 L2
  5. 刷新两个列表视图以反映更改

我正在使用 D2.Add(R1)。这与使用 D2.Rows.Add(R1X.ItemArray) 有什么关系吗?

我收到的错误是“此行已属于另一个表”。我确保在将 R1X 插入 D2 之前先尝试从 D1 中删除 R1。

【问题讨论】:

  • 如果这是 WinForms,您几乎可以肯定使用DataGridView 控件而不是ListView 控件。然后,您可以实际绑定数据。至于复制数据,看ImportRow方法。
  • 好的,我将不得不研究该方法。您如何在 DataRow 上回答上述问题 2?
  • 让您的数据库处理带有身份/自动编号字段的主键。不要自己滚。您将在多用户环境中遇到问题。
  • 谢谢玛丽。我的程序旨在获取要在应用程序中使用的原始数据文件。后端没有数据库交互;仅与 D1 和 D2 交互。
  • 好的... Mary,在导入到我的应用程序之前,我已经构建了一些数据建模,以保证 D1 和 D2 中的主键是不同的。我通过将“系列”应用于从 1,000,000 开始的关键 D1 系列和从 2,000,000 开始的 D2 系列来做到这一点。这消除了对#2的需要

标签: vb.net listview datatable datarow


【解决方案1】:

更新:

使用 ImportRow 效果很好,并且利用数据库来规划主键,这样就不会有重复的机会,那么下面的代码就可以工作了:

Dim HostRow As DataRow = D2.Rows.Find(SomeId)
        'Insert the dr into both target Tables
        D1.ImportRow(D2.Rows.Find(SomeId))
        'Delete the reference record from the host table
        D2.Rows.Remove(HostRow)

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2013-05-29
    • 2021-07-26
    相关资源
    最近更新 更多