以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 想在表打开时,做一些检索操作,并改变样式,怎么写? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130196) |
-- 作者:ycwk -- 发布时间:2019/1/15 17:21:00 -- 想在表打开时,做一些检索操作,并改变样式,怎么写? 想在"资产管理表" 显示的时候,分别检索对应的 电脑终端管理表 其它终端管理表 网络交换机管理表 服务器管理表 各表里有没有相同的资产卡片号字段,没有,则改变当前行的颜色,写在drawcell里面,很慢,而且不起作用,要怎么弄? If e.Row("资产类型")="电脑" And e.Row.IsNull("资产卡片号")=False And e.Row("资产卡片号")<>"N" Then Dim dr As DataRow = DataTables("电脑终端管理表").SQLFind("资产卡片号=\'" & e.Row("资产卡片号") & "\'") If dr Is Nothing Then e.Style = "服务器被删除" End If Else If e.Row("资产类型")="其它" And e.Row.IsNull("资产卡片号")=False And e.Row("资产卡片号")<>"N" Then Dim dr As DataRow = DataTables("其它终端管理表").SQLFind("资产卡片号=\'" & e.Row("资产卡片号") & "\'") If dr Is Nothing Then \'如果提醒间隔超出设定,且任务没完成,也没关闭,则刷红 e.Style = "服务器被删除" End If Else If e.Row("资产类型")="交换机" And e.Row.IsNull("资产卡片号")=False And e.Row("资产卡片号")<>"N" Then Dim dr As DataRow = DataTables("网络交换机管理表").SQLFind("资产卡片号=\'" & e.Row("资产卡片号") & "\'") If dr Is Nothing Then e.Style = "服务器被删除" End If Else If e.Row("资产类型")="服务器" And e.Row.IsNull("资产卡片号")=False And e.Row("资产卡片号")<>"N" Then Dim dr As DataRow = DataTables("服务器管理表").SQLFind("资产卡片号=\'" & e.Row("资产卡片号") & "\'") If dr Is Nothing Then e.Style = "服务器被删除" End If End If
[此贴子已经被作者于2019/1/15 17:21:26编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/1/15 17:34:00 -- 1、尽量不要用sqlFind,把数据全部加载后用find都比sqlfind快。
2、不要再drawcell事件写耗时代码,特别是find的代码。
与其一直find,不如加入一个辅助列,把信息引用过来。然后再在drawcell里面直接判断本表数据。 |
-- 作者:ycwk -- 发布时间:2019/1/15 17:48:00 -- 但是我这个资产表,根据资产类型不同,要关联4张不同的表,这要怎么关联到一个字段上啊? |
-- 作者:有点甜 -- 发布时间:2019/1/15 17:51:00 -- 以下是引用ycwk在2019/1/15 17:48:00的发言:
但是我这个资产表,根据资产类型不同,要关联4张不同的表,这要怎么关联到一个字段上啊?
drawcell事件,改一下,写到datacolchanged事件啊。
重置列得到值啊,把值记录到一个字段上啊。
根据字段的值,设置样式啊。 |
-- 作者:ycwk -- 发布时间:2019/1/15 17:59:00 -- 重置列怎么触发呢?在表的afterload事件中? |
-- 作者:有点甜 -- 发布时间:2019/1/15 18:00:00 -- 以下是引用ycwk在2019/1/15 17:59:00的发言:
重置列怎么触发呢?在表的afterload事件中?
afterOpenProject事件表afterLoad事件,你各个表修改值后,也要重置列。 |
-- 作者:ycwk -- 发布时间:2019/1/15 18:05:00 -- afterOpenProject事件 表afterLoad事件 这两个事件任意一个都行吗? 我只在看资产管理表的时候 改变在其它表中绑定的行的颜色就行了,其它表数据变化时,应该不用触发重置列事件吧? |
-- 作者:有点甜 -- 发布时间:2019/1/15 18:08:00 -- 1、afterOpenProject是启动的时候重置列,如果你不需要可以不写;
2、afterLoad事件是,加载表数据的时候触发,如果不需要可以不写;
3、在任意地方,或者做一个按钮,重置列,也可以啊。需要刷新数据的时候,就重置列。 |
-- 作者:ycwk -- 发布时间:2019/1/17 9:51:00 -- 在aftercolchanged事件中用1楼的代码,现在5000多条记录,重置一次要卡半分钟,请问有什么办法优化吗? 在资产卡片号 和资产类型上面加索引行不? |
-- 作者:有点甜 -- 发布时间:2019/1/17 9:58:00 -- 1、贴出所写代码以及所写位置。
2、尽量不要用sqlFind啊,加载全部数据后find都比sqlfind要划算。
3、5000行,只需要计算一次即可啊。之后,你各个表修改数据以后,实时修改数据啊。
4、不然,你就单独做一个按钮,把数据加载出来,然后循环每一行,find,获取设置值。 |