Foxtable(狐表)用户栏目专家坐堂 → 想在表打开时,做一些检索操作,并改变样式,怎么写?


  共有2311人关注过本帖树形打印复制链接

主题:想在表打开时,做一些检索操作,并改变样式,怎么写?

帅哥哟,离线,有人找我吗?
ycwk
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
想在表打开时,做一些检索操作,并改变样式,怎么写?  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/15 17:34:00 [只看该作者]

1、尽量不要用sqlFind,把数据全部加载后用find都比sqlfind快。

 

2、不要再drawcell事件写耗时代码,特别是find的代码。

 

与其一直find,不如加入一个辅助列,把信息引用过来。然后再在drawcell里面直接判断本表数据。


 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2019/1/15 17:48:00 [只看该作者]

但是我这个资产表,根据资产类型不同,要关联4张不同的表,这要怎么关联到一个字段上啊?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/15 17:51:00 [只看该作者]

以下是引用ycwk在2019/1/15 17:48:00的发言:
但是我这个资产表,根据资产类型不同,要关联4张不同的表,这要怎么关联到一个字段上啊?

 

drawcell事件,改一下,写到datacolchanged事件啊。

 

重置列得到值啊,把值记录到一个字段上啊。

 

根据字段的值,设置样式啊。


 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2019/1/15 17:59:00 [只看该作者]

重置列怎么触发呢?在表的afterload事件中?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/15 18:00:00 [只看该作者]

以下是引用ycwk在2019/1/15 17:59:00的发言:
重置列怎么触发呢?在表的afterload事件中?

 

afterOpenProject事件表afterLoad事件,你各个表修改值后,也要重置列。


 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2019/1/15 18:05:00 [只看该作者]

afterOpenProject事件     表afterLoad事件   这两个事件任意一个都行吗?    我只在看资产管理表的时候 改变在其它表中绑定的行的颜色就行了,其它表数据变化时,应该不用触发重置列事件吧?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/15 18:08:00 [只看该作者]

1、afterOpenProject是启动的时候重置列,如果你不需要可以不写;

 

2、afterLoad事件是,加载表数据的时候触发,如果不需要可以不写;

 

3、在任意地方,或者做一个按钮,重置列,也可以啊。需要刷新数据的时候,就重置列。


 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2019/1/17 9:51:00 [只看该作者]

 在aftercolchanged事件中用1楼的代码,现在5000多条记录,重置一次要卡半分钟,请问有什么办法优化吗?  在资产卡片号 和资产类型上面加索引行不?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/17 9:58:00 [只看该作者]

1、贴出所写代码以及所写位置。

 

2、尽量不要用sqlFind啊,加载全部数据后find都比sqlfind要划算。

 

3、5000行,只需要计算一次即可啊。之后,你各个表修改数据以后,实时修改数据啊。

 

4、不然,你就单独做一个按钮,把数据加载出来,然后循环每一行,find,获取设置值。


 回到顶部
总数 12 1 2 下一页