Foxtable(狐表)用户栏目专家坐堂 → [求助]如何判断单元格是否可编辑


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

主题:[求助]如何判断单元格是否可编辑

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


加好友 发短信
等级:四尾狐 帖子:824 积分:7120 威望:0 精华:0 注册:2017/8/31 12:07:00
[求助]如何判断单元格是否可编辑  发帖心情 Post By:2024/2/21 9:22:00 [只看该作者]

麻烦问一下老师:


PrepareEdit


事件中的e.Cancel = True


如何在DrawCell中判断单元格是否已经禁止编辑,这样DrawCell就可以少写些代码,提高效率。




[此贴子已经被作者于2024/2/21 9:23:34编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110554 积分:562660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/2/21 9:38:00 [只看该作者]

PrepareEdit是怎么判断的,DrawCell一样的用法呀

比如PrepareEdit
If e.Row("已结帐") = True AndAlso User.Group <> "经理" Then
    e.Cancel = True
End
 
If

DrawCell
If e.Row("已结帐") = True AndAlso User.Group <> "经理" Then
    e.style = "样式1"
End
 
If

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


加好友 发短信
等级:四尾狐 帖子:824 积分:7120 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2024/2/21 9:50:00 [只看该作者]

感谢蓝老师的回复,我本来就按照二楼用法,但是出现以下问题:

问题一:因为有代码比较耗时(后台查询判断),PrepareEdi和DrawCell执行两遍感觉有点卡,所以才有一楼的想法,能判断单元格是否已禁止编辑吗?

问题二:表是在窗口打开的,同时窗口添加了主菜单,添加PrepareEdi和DrawCell事件代码后,窗口打开后主菜单需要过1秒左右才显示(严重影响使用体验),麻烦问一下是表事件影响的吗?如果是,能否将窗口菜单提前显示,表事件后执行呢?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110554 积分:562660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/2/21 9:53:00 [只看该作者]

1、没有办法判断,只能是2楼的用法

2、是不是表事件影响去掉测试不就知道了

PrepareEdi和DrawCell都写了什么代码,发上来看看

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


加好友 发短信
等级:四尾狐 帖子:824 积分:7120 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2024/2/21 10:29:00 [只看该作者]

好的,项目文件暂时不在手边,我大概写了一下代码如下:
If e.Col.Name = "编号" Then
    Dim dm As String = e.Row("编号")
    Dim dm2 As String = "'%" & dm & "%'"
    Dim dr As DataRow = DataTables("凭证序时簿").sqlFind("会计科目<>'" & dm & "' and 会计科目 Like " & dm2 & "")
    If dr IsNot Nothing Then
        e.Cancel = True 
    End If 
End If

本表数据大概50行,凭证序时簿数据有5000条左右。
[此贴子已经被作者于2024/2/21 10:50:29编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110554 积分:562660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/2/21 10:51:00 [只看该作者]

PrepareEdi和DrawCell执行都是非常频繁的,可能会一秒就很执行多次,帮助也强调了不要有费时的代码,而sqlFind这种后台查询就是最费时的,想想50行,假设每秒执行3次,就是每秒可能会后台查询150次,不卡才怪。

如果"凭证序时簿"数据不多建议全部加载后查询。如果多考虑优化数据库结构,尽量不要频繁的后台查询

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


加好友 发短信
等级:四尾狐 帖子:824 积分:7120 威望:0 精华:0 注册:2017/8/31 12:07:00
  发帖心情 Post By:2024/2/21 10:53:00 [只看该作者]

明白了,谢谢!

 回到顶部