【发布时间】:2019-01-18 16:49:50
【问题描述】:
我的页面设计上有三个标签。在第三个选项卡中,创建了动态选项卡。选项卡的数量基于输入文件中的行数(在第一个选项卡中,在这种情况下,我将在第三个选项卡中使用两行 == 两个(动态)选项卡)。 这意味着有两个表,第一个动态选项卡中的一个表(我们称之为表 A)和第二个动态选项卡中的另一个表(我们称之为表 B)。
我正在尝试将表 A 和 B 添加到数组列表中。
目前我有代码;
For each page in Tabs.Tabpages
Dim dataTableToCopy as New DataTable
dataTableToCopy = dynamicDataTable.copy
arraylistToHoldTables.add(dataTableToCopy)
问题在于它只复制最后一个数据表,在本例中为表 B。
我尝试了另一种方法,其中涉及合并数据表。
For each page in Tabs.Tabpages
Dim dataTableToCopy as New DataTable
dataTableToCopy = dynamicDataTable.copy
mergedDataTable.Merge(dataTableToCopy)
arraylistToHoldTables.add(dataTableToCopy)
这种方法的问题在于,虽然我能够检索所有值,但主要任务是将每个表添加到数组列表中。 我正在考虑可能拆分合并的数据表,但不确定从那里采取的方法。
在第 100 行拆分,因为每个表有 100 行
【问题讨论】:
-
首先,你为什么要使用
ArrayList?现在已经不是 2004 年了。如果您想要包含DataTables的集合,请使用List(Of DataTable)。其次,为什么在声明dataTableToCopy变量的时候又新建了一个DataTable,然后又马上丢弃呢?您需要了解New关键字的作用以及何时使用它。如果您不想要新的DataTable,请不要创建。 -
至于问题,第一个代码 sn-p 在循环的每次迭代中使用相同的
DataTable调用Copy。page是当前的TabPage,因此您需要在循环内获取与该页面关联的DataTable,而不是始终使用引用相同DataTable的变量。在For Each循环中,如果你没有在循环内使用循环控制变量,那么你几乎肯定做错了。
标签: vb.net dynamic merge datatable copy