以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]绘制单元格代码太卡,哪位大神能帮我优化一下 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40102) |
||||
-- 作者:wangyi870704 -- 发布时间:2013/9/9 16:11:00 -- [求助]绘制单元格代码太卡,哪位大神能帮我优化一下 绘制单元格太卡了,哪位大神能帮我把代码优化一下
是这样的,每一期都要将本期中奖号在上一期中标红,后面的也是,33个列为单独一张表 [此贴子已经被作者于2013-9-9 16:12:37编辑过]
|
||||
-- 作者:Bin -- 发布时间:2013/9/9 16:15:00 -- 你这个,要优化只能是分页加载.不要加载那么多出来. |
||||
-- 作者:wangyi870704 -- 发布时间:2013/9/9 16:21:00 -- 回复:(Bin)你这个,要优化只能是分页加载.不要加载那... 代码上面不能改进了么,或者方法上,比如绘制单元格的时候,绘制好了就不再重复绘制,我发现这个绘制单元格事件是一直在运行的,你单元格显示到哪,单元格就绘制到哪,非常耗内存,我希望直接给单元格上色后就不再运行了,下次如果数据更新了,有的单元格没有绘制上颜色,可以通过点击按钮触发事件让其再次重新绘制 |
||||
-- 作者:Bin -- 发布时间:2013/9/9 16:23:00 -- 这个事件本来就是这样的,事件介绍里也说明了. 所以你能做的只能是分页加载.减少绘制的单元格数量. |
||||
-- 作者:lsy -- 发布时间:2013/9/9 16:37:00 -- 列看起来非到Y12不可了,这样设计的意图是什么呢?12*33列,再加上期号列,就397列了,不要说快慢的事,打开软件都不可能。 能不能分成12个表? [此贴子已经被作者于2013-9-9 16:37:45编辑过]
|
||||
-- 作者:wangyi870704 -- 发布时间:2013/9/9 16:56:00 -- 回复:(lsy)列看起来非到Y12不可了,这样设计的意图... 哈哈,不出你所料,每期33列,人家要求我循环100次,也就是3300列,我是要分表的,不是因为卡,是因为内部数据库每张表最多只能有253列,我会分成十几张表,但关键是这一张表的单元格绘制很卡,只要这一张表不卡,就可以了哦,没办法,人家要求我这么做的 |
||||
-- 作者:wangyi870704 -- 发布时间:2013/9/9 16:57:00 -- 回复:(Bin)这个事件本来就是这样的,事件介绍里也说... 分页怎么写?我后面还要多加列的 |
||||
-- 作者:Bin -- 发布时间:2013/9/9 17:06:00 -- 这样的话你还不如生成报表的时候再设置颜色了. 你这种情况,怎么优化效率都不会高. |
||||
-- 作者:wangyi870704 -- 发布时间:2013/9/9 17:13:00 -- 回复:(Bin)这样的话你还不如生成报表的时候再设置颜... 好吧。看来是没辙了 |
||||
-- 作者:有点甜 -- 发布时间:2013/9/9 21:19:00 -- 用下面的代码,可能会好一些,最多也只能优化到这里了。期待高手。 If e.Row.Index >= e.Table.TopVisibleRow AndAlso e.Row.Index <= e.Table.BottomVisibleRow Then Dim flag As Boolean = False If e.Row.IsNull(e.Col.Name)= False Then For j As Integer = 0 To 6 Dim s As New List (Of String) Dim val As String = e.Row(e.Col.Name) Dim nr As Row = e.Table.Rows(e.Row.Index + 1) For i As Integer = 1 To 6 If val = nr(33*j+i) Then flag = True Exit For End If Next If e.Col.Index >(33*j) AndAlso e.Col.Index < (33*(j+1)+1) AndAlso flag Then e.Style = "下期中奖号码" flag = True Exit For Else flag = False End If Next End If If flag = False Then If e.Col.Caption.Contains("未中奖号") Then e.Style ="未中奖号" Else If e.Col.Caption.Contains("中奖号") Then e.Style ="中奖号" Else If e.Col.Caption= "期号" Then e.Style ="期号" End If End If End If |