以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 再请教:如何复制表的当前显示内容到临时表 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=82078) |
-- 作者:lake163 -- 发布时间:2016/3/11 9:39:00 -- 再请教:如何复制表的当前显示内容到临时表 当前表A,经过筛选等操作后,只显示部分行、部分列,希望将这些显示的行、列内容复制到另一个表B中。 目前的做法(也是论坛里老师教的): 是将表B作为一个固定表,其结构自表A复制过来,然后复制数据,代码如下。
Dim nma1,nmb1 As new List(Of String ) \'集合 For Each c As Col In Tables("A" ).cols \'获得当前显示的列 If c.Visible Then nma1.add(c.Name) nmb1.add(c.Name) End If Next Dim nma =nma1 .ToArray() \'数组 Dim nmb =nmb1 .ToArray() \'复制所有行到B中 With Tables ("A") For i As Integer = 0 To .rows. Count-1 \'所有行 CurrentTable.Position = i Dim dr As DataRow = DataTables("B" ).AddNew For j As Integer = 0 To nma. Length - 1 dr(nmb(j)) = .current (nma( j)) Next Next End With 问题是:(1)当表A的结构变化后,表B的结构不会自动变化,当复制的列中有表B中不存在的列,就会出错。 (2)表B中仍然有一些多余的列。 如果能够根据当前显示的列,自动生成一个临时表B,然后再复制相关行的数据到表B中,就能解决上述问题。 还请各位老师继续指点。 |
-- 作者:大红袍 -- 发布时间:2016/3/11 12:41:00 -- 生成临时表,参考
Dim dtb As New DataTableBuilder("统计") |
-- 作者:lake163 -- 发布时间:2016/3/11 16:08:00 -- 谢谢超版! 这样做,存在一个致命的问题:数据的格式全是字符型,且长度是固定的。 这就导致:一是超长的内容无法复制,二是日期型等变成了字符型。 查了帮助,搜了论坛,采用狐狸爸爸提供的通用代码: http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=9428&replyID=68995&skin=1 好像能够解决问题,但该做法,又需要重新打开项目。 有没有更好的办法呢? |
-- 作者:大红袍 -- 发布时间:2016/3/11 17:46:00 -- 一样,参考代码
Dim dtb As New DataTableBuilder("统计") |
-- 作者:lake163 -- 发布时间:2016/3/12 9:45:00 -- 谢谢! 通过上述方法,在将列类型判断添加完整,再使用GetColVisibleWidth和SetColVisibleWidth,基本上能获得与当前表视图基本一致的临时表视图。 但对日期列,仍然有一个小问题: 日期列我们一般都使用YY-mm格式,在原有的表中都是通过DrawCell事件来实现的。 但在临时表中如何实现呢? 尝试使用全局DrawCell事件(事件开关已打开),发现正常情况下无法生效,只有在开发状态下先打开全局表的DrawCell事件,然后才会起作用。 请问如何处理?
[此贴子已经被作者于2016/3/12 9:45:38编辑过]
|
-- 作者:Hyphen -- 发布时间:2016/3/12 10:19:00 -- 4楼代码后面加上一句 ...... dtb.Build() MainTable= Tables("统计") DataTables("统计").GlobalHandler.DrawCell = True |
-- 作者:lake163 -- 发布时间:2016/3/12 11:42:00 -- 太好了,谢谢各位! |