以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]DrawCell事件 效率求助 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=74297) |
-- 作者:huangfanzi -- 发布时间:2015/9/8 8:30:00 -- [求助]DrawCell事件 效率求助 下面代码中,黄底部分加上去后,效率执行太低下了,才10条不到的需要绘制的数据,要执行2秒,老师帮我看看是不是代码用的不合理。 DrawCell事件 If e.Table.Rows.Count >0 Then e.Table.DataTable.AddUserStyle("样式1", Color.Yellow,Color.Black) e.Table.DataTable.AddUserStyle("样式2", Color.Blue,Color.Black) Dim t As Table = Tables("生产计划通知单") If e.Row("生产计划编号") = t.Current("生产计划编号") Then e.style = "样式1" Else Dim ls As List(Of String) = DataTables("生产计划通知单").SQLGetValues("生产计划编号" , "[通知类型] = \'" & t.Current("通知类型") & "\'") If ls.Contains(e.Row("生产计划编号")) Then e.style = "样式2" End If End If End If [此贴子已经被作者于2015/9/8 8:30:23编辑过]
|
-- 作者:Hyphen -- 发布时间:2015/9/8 9:09:00 --
[此贴子已经被作者于2015/9/8 9:14:39编辑过]
|
-- 作者:rjh4078 -- 发布时间:2015/9/8 9:12:00 -- 弄个变量 drawcell只需判断变量即可 不要把大量判断放到drawcell里 |
-- 作者:大红袍 -- 发布时间:2015/9/8 9:12:00 -- 肯定不合理,drawcell是重复不断的执行的。不要重复用SqlGetValues
你可以用一个变量记录ls,在需要重新获取的地方执行sqlGetValues(比如CurrentChanged事件),然后在drawcell直接判断
public ls as List(Of String)
------------------
ls = DataTables("生产计划通知单").SQLGetValues("生产计划编号" , "[通知类型] = \'" & t.Current("通知类型") & "\'")
---------------------------
If ls.Contains(e.Row("生产计划编号")) Then |
-- 作者:huangfanzi -- 发布时间:2015/9/8 9:47:00 -- 果然,效率不是提高一点点,看来原来没有好好掌握DrawCell事件的特性,原代码中不停的写入集合,另有一个小问题,也请教下: 假如有二行数据,结构如下: 通知类型 通知单号 A 001 A 001 当输入第二行数据的类型时,如果与上一行一致,则通知单号也用上一行的通知单号 下面是我目前的写法,但越看越别扭,是不是有更简单的写法。 DataColChanged 事件 If e.DataCol.Name = "通知类型" Then If e.DataRow("通知类型") = CurrentTable.Rows(CurrentTable.Current.Index - 1)("通知类型") Then e.DataRow("通知单号") = CurrentTable.Rows(CurrentTable.Current.Index - 1)("通知单号") Else e.DataRow("通知单号") = Nothing End If End If [此贴子已经被作者于2015/9/8 9:47:42编辑过]
|
-- 作者:大红袍 -- 发布时间:2015/9/8 10:42:00 -- DataColChanged事件处理行位置的代码肯定别扭。
If e.DataCol.Name = "通知类型" Then |