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