Foxtable(狐表)用户栏目专家坐堂 → [求助] 在全局表事件 DrawCell 中,这段代码怎么不执行呢?


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

主题:[求助] 在全局表事件 DrawCell 中,这段代码怎么不执行呢?

美女呀,离线,留言给我吧!
龙潭春早
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
[求助] 在全局表事件 DrawCell 中,这段代码怎么不执行呢?  发帖心情 Post By:2020/2/6 17:24:00 [显示全部帖子]

一、之前,表不多、图片列也少,所以在两三个表的 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 进行测试。

 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By: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


 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2020/2/9 0:46:00 [显示全部帖子]

按照楼上的要求做了,把所有表的 DrawCell 事件 里面的代码全部都去掉了。

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

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

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

为什么会这样呢?

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



 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2020/2/26 19:55:00 [显示全部帖子]

5楼的:把表事件DrawCell里面的代码全部去掉(包括注释的,一个字符都不能留),如果表事件DrawCell有代码,就不会执行全局表事件DrawCell。

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

也就是说:

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

 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2020/2/27 17:02:00 [显示全部帖子]

或者倒过来说,对于 DrawCell 事件:

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

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

 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2020/2/27 17:23:00 [显示全部帖子]

多谢

 回到顶部