以文本方式查看主题

-  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
--  
明白了,谢谢!