vb.net – 将不同类型的列从数据表合并为一个更大的数据表
我有两个单独的数据表,一个是整数,另一个是字符串.两者都是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) 希望这有助于理解!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |