以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 在全局表事件 DrawCell 中,这段代码怎么不执行呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145755)

--  作者:龙潭春早
--  发布时间:2020/2/6 17:24:00
--  [求助] 在全局表事件 DrawCell 中,这段代码怎么不执行呢?
一、之前,表不多、图片列也少,所以在两三个表的 DrawCell 事件中,加上了下面这段代码,一直使用正常:

Select Case e.Col.Name
Case "联系人照片"
e.StartDraw
If e.Row("联系人照片") > ""  Then
Dim Ls = e.Row.DataRow.Lines("联系人照片")
If FileSys.FileExists(projectPath & "RemoteFiles\\" & Ls(0)) Then \'如果文件存在
e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 90, 75)  \' 绘制第一个图标
End If
End If
e.text = ""
e.EndDraw

Case "产品图片"
e.StartDraw
If e.Row("产品图片") > ""  Then
Dim Ls = e.Row.DataRow.Lines("产品图片")
If FileSys.FileExists(projectPath & "RemoteFiles\\" & Ls(0)) Then \'如果文件存在
e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 100, 75)  \' 绘制第一个图片
End If
End If
e.text = ""
e.EndDraw
End Select

二、现在,表、图片列都多了,所以取消了在各个表中的代码,统一在全局表事件 DrawCell 中,加上了下面的代码。

但是不执行,什么原因呢?

For Each dc As DataCol In e.Table.DataTable.DataCols
If dc.ExtendType = ExtendTypeEnum.Images Then
e.StartDraw
If e.Row(dc.Name) > ""  Then
Dim Ls = e.Row.DataRow.Lines(dc.Name)
If FileSys.FileExists(projectPath & "RemoteFiles\\" & Ls(0)) Then \' 如果文件存在
Dim strs As String = dc.Name
If strs.Contains("照片") Then
e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 90, 75)  \' 绘制第一个图标
ElseIf strs.Contains("图片") Then
e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 100, 75)  \' 绘制第一个图标
End If
End If
End If
e.text = ""
e.EndDraw
End If
Next

【说明】之前没有加 Dim strs As String = dc.Name直接使用的 dc.Name
因为代码不执行,才加了 strs 进行测试。

--  作者:kylin
--  发布时间:2020/2/6 17:56:00
--  
项目事件Initialize加入代码:
For Each dt As DataTable In DataTables
    dt.GlobalHandler.DrawCell
= True
Next


--  作者:有点蓝
--  发布时间:2020/2/6 18:19:00
--  
启用全局表事件了吗?http://www.foxtable.com/webhelp/topics/0671.htm
--  作者:龙潭春早
--  发布时间:2020/2/6 20:01:00
--  
之前,已经项目事件 Initialize 中,打开了这个全局表事件(最后一个就是):

\' 打开以下全局表事件( 11个 )

For Each dt As DataTable In DataTables

    dt.GlobalHandler.PrepareEdit = True \' 准备编辑单元格
    dt.GlobalHandler.DataColChanged = True \' 列的内容被更改后执行

    dt.GlobalHandler.DataRowAdding = True \' 数据行增加一行
    dt.GlobalHandler.BeforeDeleteDataRow = True \' 准备删除数据行

    dt.GlobalHandler.DataRowLockedChanging = True \' 锁定数据行之前

    dt.GlobalHandler.BeforeMoveRow = True \' 准备移动行
    dt.GlobalHandler.BeforeDragColumn = True \' 准备移动列
    dt.GlobalHandler.BeforeFreezeColumn = True \' 准备冻结列
    dt.GlobalHandler.BeforeResizeColumn = True \' 准备调整列宽
    dt.GlobalHandler.BeforeResizeRow = True \' 准备调整行高

    dt.GlobalHandler.DrawCell = True \' 准备绘制单元格

Next


--  作者:有点蓝
--  发布时间:2020/2/7 11:40:00
--  
把表事件DrawCell里面的代码全部去掉(包括注释的,一个字符都不能留),如果表事件DrawCell有代码,就不会执行全局表事件DrawCell
--  作者:龙潭春早
--  发布时间:2020/2/9 0:46:00
--  
按照楼上的要求做了,把所有表的 DrawCell 事件 里面的代码全部都去掉了。

但是,所有表都变成这样的了。

通常,我们的一个表有两三个图片列。

但是,这时候显示的图片顺序却没有什么规律性,不是前面列的图片一定排在前面。

为什么会这样呢?

图片点击可在新窗口打开查看此主题相关图片如下:用了全局表事件 drawcell 之后.jpg
图片点击可在新窗口打开查看



--  作者:有点蓝
--  发布时间:2020/2/9 22:06:00
--  
如果区分了列名,不可能会绘制到其它列去的。上传实例看看
--  作者:龙潭春早
--  发布时间:2020/2/26 19:55:00
--  
5楼的:把表事件DrawCell里面的代码全部去掉(包括注释的,一个字符都不能留),如果表事件DrawCell有代码,就不会执行全局表事件DrawCell。

这一条,是对所有的全局表事件都成立的吗?

也就是说:

1)如果要使用全局表事件,就必须把对应的表事件里面的代码全部去掉(包括注释的,一个字符都不能留)吗?
2)如果表事件有代码,就不会执行对应的全局表事件吗?
[此贴子已经被作者于2020/2/26 19:57:42编辑过]

--  作者:有点蓝
--  发布时间:2020/2/27 9:43:00
--  
只有DrawCell事件会这样,A表DrawCell有代码,只影响A表全局事件,不会影响其他表全局事件。

其它表事件,会先执行表事件,再执行全局表事件,也就是都执行

--  作者:龙潭春早
--  发布时间:2020/2/27 17:02:00
--  
或者倒过来说,对于 DrawCell 事件:

如果使用了 全局表事件 中的 DrawCell,那么,对于所有的表,就不能使用 任何表事件 中的 DrawCell 了。

是吗?
[此贴子已经被作者于2020/2/27 17:02:13编辑过]