gpt4 book ai didi

vb.net - 将数据表中不同类型的列合并到一个更大的数据表中

转载 作者:行者123 更新时间:2023-12-02 09:34:35 27 4
gpt4 key购买 nike

我有两个单独的数据表,一个是整数,一个是字符串。两者的大小都是 3x3,我想简单地合并两个表并将它们显示在 datagridview 中,以便显示 3x6 datagridview。

Two separate datatables

我想将两者放在一起以获得下面的图像

Datatables joined

    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, 1)
stringtable.Rows.Add(2, 2, 2, 2)
stringtable.Rows.Add(3, 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", "A")
Inttable.Rows.Add(2, "B", "B", "B")
Inttable.Rows.Add(3, "C", "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

我尝试了一些方法,但似乎无法做到这一点。有时,它会用 12 个空白单元格填充 6x6 的 datagridview,而有时,它会保留一个数据表的值,但为第二个数据表的所有值添加空白。

编辑我已经编辑了代码以反射(reflect)向数据表添加主键,但现在对于某些表填充了空白单元格。有人可以告诉我为什么数据表不会只在主数据库上合并而不留空白

enter image description here

最佳答案

为了合并 2 个数据表,您需要一个公共(public)列 - 我想说,最好/最简单的选择是向两个数据表添加一个主键列,然后您可以像在代码中那样简单地合并它们。

<小时/>

更新:

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

这里有几个问题:

  1. 您已使用名称 PK 定义了主键列,则 primaryKey(0) = Inttable.Columns("Name")

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

  1. 您定义primaryKey数组如下:

    将primaryKey(1)调暗为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, 1, 1)
stringtable.Rows.Add(2, 2, 2, 2)
stringtable.Rows.Add(3, 3, 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", "A", "A")
Inttable.Rows.Add(2, "B", "B", "B")
Inttable.Rows.Add(3, "C", "C", "C")

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

stringtable.Merge(Inttable, False, MissingSchemaAction.AddWithKey)

希望这有帮助并且有意义!!

关于vb.net - 将数据表中不同类型的列合并到一个更大的数据表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com