以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]如何判断单元格是否可编辑 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190542) |
-- 作者:洮沙 -- 发布时间:2024/2/21 9:22:00 -- [求助]如何判断单元格是否可编辑 麻烦问一下老师: PrepareEdit 事件中的e.Cancel = True 如何在DrawCell中判断单元格是否已经禁止编辑,这样DrawCell就可以少写些代码,提高效率。 [此贴子已经被作者于2024/2/21 9:23:34编辑过]
|
-- 作者:有点蓝 -- 发布时间: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 |
-- 作者:洮沙 -- 发布时间:2024/2/21 9:50:00 -- 感谢蓝老师的回复,我本来就按照二楼用法,但是出现以下问题: 问题一:因为有代码比较耗时(后台查询判断),PrepareEdi和DrawCell执行两遍感觉有点卡,所以才有一楼的想法,能判断单元格是否已禁止编辑吗? 问题二:表是在窗口打开的,同时窗口添加了主菜单,添加PrepareEdi和DrawCell事件代码后,窗口打开后主菜单需要过1秒左右才显示(严重影响使用体验),麻烦问一下是表事件影响的吗?如果是,能否将窗口菜单提前显示,表事件后执行呢? |
-- 作者:有点蓝 -- 发布时间:2024/2/21 9:53:00 -- 1、没有办法判断,只能是2楼的用法 2、是不是表事件影响去掉测试不就知道了 PrepareEdi和DrawCell都写了什么代码,发上来看看
|
-- 作者:洮沙 -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/2/21 10:51:00 -- PrepareEdi和DrawCell执行都是非常频繁的,可能会一秒就很执行多次,帮助也强调了不要有费时的代码,而sqlFind这种后台查询就是最费时的,想想50行,假设每秒执行3次,就是每秒可能会后台查询150次,不卡才怪。 如果"凭证序时簿"数据不多建议全部加载后查询。如果多考虑优化数据库结构,尽量不要频繁的后台查询
|
-- 作者:洮沙 -- 发布时间:2024/2/21 10:53:00 -- 明白了,谢谢! |