加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 将不同类型的列从数据表合并为一个更大的数据表

发布时间:2020-12-17 00:01:29 所属栏目:大数据 来源:网络整理
导读:我有两个单独的数据表,一个是整数,另一个是字符串.两者都是3×3大小,我想简单地合并两个表并在datagridview中显示它们,以便我显示3×6 datagridview. 我想把两者放在一起得到下面的图像 Dim stringtable As New DataTable stringtable.Columns.Add("PK",GetT
我有两个单独的数据表,一个是整数,另一个是字符串.两者都是3×3大小,我想简单地合并两个表并在datagridview中显示它们,以便我显示3×6 datagridview.

我想把两者放在一起得到下面的图像

Dim stringtable As New DataTable
    stringtable.Columns.Add("PK",GetType(Integer))
    stringtable.Columns.Add("Col1",GetType(Integer))
    stringtable.Columns.Add("Col2",GetType(Integer))
    stringtable.Columns.Add("Col3",GetType(Integer))

    stringtable.Rows.Add(1,1,1)
    stringtable.Rows.Add(2,2,2)
    stringtable.Rows.Add(3,3,3)

    Dim primaryKey(1) As DataColumn
    primaryKey(0) = stringtable.Columns("Name")
    stringtable.PrimaryKey = primaryKey

    Dim Inttable As New DataTable
    Inttable.Columns.Add("PK",GetType(Integer))
    Inttable.Columns.Add("ColA",GetType(String))
    Inttable.Columns.Add("ColB",GetType(String))
    Inttable.Columns.Add("ColC",GetType(String))

    Inttable.Rows.Add(1,"A","A")
    Inttable.Rows.Add(2,"B","B")
    Inttable.Rows.Add(3,"C","C")

    primaryKey(0) = Inttable.Columns("Name")
    Inttable.PrimaryKey = primaryKey

    DataGridView2.DataSource = stringtable
    DataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    DataGridView2.AllowUserToAddRows = False

    DataGridView1.DataSource = Inttable
    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    DataGridView1.AllowUserToAddRows = False


    ''This is where I can't figure out what do
    Dim mergedTable As New DataTable
    mergedTable = DataGridView2.DataSource
    mergedTable.Merge(Inttable,False,MissingSchemaAction.Add)

    DataGridView3.DataSource = mergedTable

我尝试过一些东西,但似乎无法做到这一点.有时它会填充6×6 datagridview,其中包含12个空白单元格,有时则会保留一个数据表的值,但会为第二个值的所有值填充空白.

编辑
我编辑了我的代码,以反映在数据表中添加主键,但现在有些表填充了空白单元格.有人能告诉我为什么数据表不会只是在主要数据上合并而不会留下空白

为了合并2个DataTable,你需要一个公共列 – 我会说,你最好/最简单的选择是向两者添加一个主键列然后你可以像在代码中那样简单地合并它们.

更新:

根据您更新的代码,您的问题在于如何定义主键…

这里有几个问题:

>您已使用名称PK定义了主键列,然后您具有primaryKey(0)= Inttable.Columns(“Name”)

这应该是primaryKey(0)= Inttable.Columns(“PK”)

>您可以按如下方式定义primaryKey数组:

Dim primaryKey(1)As DataColumn

它应该是:

Dim primaryKey(0) As DataColumn

使它只有一个值(你的方式实际上创建了一个2元素数组,因为它是数组的从零开始的语言).

您更改的代码应如下所示:

Dim primaryKey(0) As DataColumn
primaryKey(0) = stringtable.Columns("PK")
stringtable.PrimaryKey = primaryKey

不过,我喜欢写这篇文章的方式(尽管它会完成同样的事情)如下:

stringtable.PrimaryKey = {stringtable.Columns("PK")}

只是为了帮助你,这里是我创建的一些代码来做你想要做的事情(没有DataGridView部分)

Dim stringtable As New DataTable
stringtable.Columns.Add("PK",GetType(Integer))
stringtable.Columns.Add("Col1",GetType(Integer))
stringtable.Columns.Add("Col2",GetType(Integer))
stringtable.Columns.Add("Col3",GetType(Integer))

stringtable.Rows.Add(1,1)
stringtable.Rows.Add(2,2)
stringtable.Rows.Add(3,3)

stringtable.PrimaryKey = {stringtable.Columns("PK")}

Dim Inttable As New DataTable
Inttable.Columns.Add("PK",GetType(Integer))
Inttable.Columns.Add("ColA",GetType(String))
Inttable.Columns.Add("ColB",GetType(String))
Inttable.Columns.Add("ColC",GetType(String))

Inttable.Rows.Add(1,"A")
Inttable.Rows.Add(2,"B")
Inttable.Rows.Add(3,"C")

Inttable.PrimaryKey = {Inttable.Columns("PK")}

stringtable.Merge(Inttable,MissingSchemaAction.AddWithKey)

希望这有助于理解!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读