我有两个单独的数据表,一个是整数,另一个是字符串.两者都是3×3大小,我想简单地合并两个表并在datagridview中显示它们,以便我显示3×6 datagridview.
@H_403_1@我想把两者放在一起得到下面的图像
我编辑了我的代码,以反映在数据表中添加主键,但现在有些表填充了空白单元格.有人能告诉我为什么数据表不会只是在主要数据上合并而不会留下空白
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@H_403_1@我尝试过一些东西,但似乎无法做到这一点.有时它会填充6×6 datagridview,其中包含12个空白单元格,有时则会保留一个数据表的值,但会为第二个值的所有值填充空白. @H_403_1@编辑
我编辑了我的代码,以反映在数据表中添加主键,但现在有些表填充了空白单元格.有人能告诉我为什么数据表不会只是在主要数据上合并而不会留下空白
为了合并2个DataTable,你需要一个公共列 – 我会说,你最好/最简单的选择是向两者添加一个主键列然后你可以像在代码中那样简单地合并它们.
@H_403_1@更新:
@H_403_1@根据您更新的代码,您的问题在于如何定义主键…
@H_403_1@这里有几个问题:
@H_403_1@>您已使用名称PK定义了主键列,然后您具有primaryKey(0)= Inttable.Columns(“Name”)
@H_403_1@这应该是primaryKey(0)= Inttable.Columns(“PK”)
@H_403_1@>您可以按如下方式定义primaryKey数组:
@H_403_1@Dim primaryKey(1)As DataColumn
@H_403_1@它应该是:
Dim primaryKey(0) As DataColumn@H_403_1@使它只有一个值(你的方式实际上创建了一个2元素数组,因为它是数组的从零开始的语言). @H_403_1@您更改的代码应如下所示:
Dim primaryKey(0) As DataColumn primaryKey(0) = stringtable.Columns("PK") stringtable.PrimaryKey = primaryKey@H_403_1@不过,我喜欢写这篇文章的方式(尽管它会完成同样的事情)如下:
stringtable.PrimaryKey = {stringtable.Columns("PK")}@H_403_1@只是为了帮助你,这里是我创建的一些代码来做你想要做的事情(没有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)@H_403_1@希望这有助于理解!!