【问题标题】:Vb.net Updating Datagrid View with data from multiple DatatablesVb.net 使用来自多个数据表的数据更新 Datagrid 视图
【发布时间】:2014-01-16 17:37:54
【问题描述】:

我有两个数据表,它们具有资产映射(资产 ID 和 EmpID 标记到每个资产)和员工详细信息(公司中所有员工的 EmpID)。现在我想构建第三个数据表,它显示未标记为有效关联的资产,即第一个数据表中的 EmpID 不应出现在第二个数据表中。

用 SQL 术语来说是:

Select AssetID, UserID from AssetMapping
Where UserID Not In (Select EmpID from AssociateDetail)

如何完成在第三个数据表中获取结果的任务(稍后我需要在数据网格视图中显示)?

【问题讨论】:

  • 我不明白 UserID 和 EmpID 之间的区别。你能写出你的 2 个表的结构吗?
  • UserID 和 EmpID 是一回事。它在 2 个不同的来源中以 2 个不同的名称表示。基本上它的主键。感谢您的以下建议,我将尝试实施它并让您知道最终结果。

标签: sql vb.net datagridview datatable


【解决方案1】:

我不知道 UserID 的存储位置,但应该没关系。

在这个小示例中,您使用 LINQ 构建第三个表数据,从前 2 个表(AssetMappingAssociateDetails)开始。最终结果是第三张表,其中填充了与 Associate 表中的任何 EmpID 不匹配的 Asset

结果:

基本上我填写了我的数据库表AssetMappingAssociateDetails。 然后,当我点击Button1 时,我会保存EmpID 的列表,并获得一组AssetID,它与这些EmpID 中的任何一个都没有关联。

Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.AssociateDetailsTableAdapter.Fill(Me.StackOverflowDataSet.AssociateDetails)
        Me.AssetMappingTableAdapter.Fill(Me.StackOverflowDataSet.AssetMapping)
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim EmpIdsList = (From em In StackOverflowDataSet.AssociateDetails
                              Select em.Field(Of Int32)("EmpID")).ToList()

        Dim q = From myRow In StackOverflowDataSet.AssetMapping
                Where EmpIdsList.Contains(myRow.Field(Of Int32)("EmpID")) = False
                Select myRow
        DataGridView3.AutoGenerateColumns = True
        DataGridView3.DataSource = q.ToList()
    End Sub
End Class

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多