动态设置文件存储位置
如果没有使用Foxtable进行文件或图片管理,或者没有动态设置存储目录的需要,可以跳过本节内容。
我们知道在默认情况下,每当我们在文件型、多文件型、以及图片型列中插入一个文件时,程序会自动将该文件复制到项目文件所在目录的子目录Attachments下。
虽然我们通过设置列属性“存放目录”,可以指定其它存储位置,但是在需要大量文件的时候,我们可能并不希望文件全部存放在同一个目录下,而是根据文件名或其它条件将文件存放在不同的子目录下。
表事件BeforeAttachFile正是为了满足此类需要而提供的,该事件在向文件型、多文件型、以及图片型列中添加文件的时候执行。
e参数属性:
DataTable: 触发事件的DataTable
DataRow: 触发事件的DataRow
DataCol: 触发事件的DataCol
SourceFolder: 要添加文件的来源目录
FileName: 要添加文件的名称,你可以根据需要改名。
SubFolder: 指定存放文件的子目录
Cancel: 逻辑型,是否取消此次添加。
示例一
例如表中有部门和图片两列,希望不同部门的图片,放在各自的目录中,为此可在BeforeAttachFile事件加上下面的代码:
Select
Case e.DataCol.Name
Case "图片"
'如果在图片列插入文件
e.Subfolder
= e.DataRow("部门")
'将此文件存放在目录名为部门名称的子目录中.
End
Select
示例二
例如希望在添加文件的时候,根据文件的后缀名自动添加到不同的子目录,例如BMP文件自动添加到BMP子目录,DOC文件添加到DOC子目录。
BeforeAttachFile事件只需一行代码即可完成此任务:
e.SubFolder = e.FileName.SubString(e.FileName.LastIndexof(
".") + 1)示例三
假定希望上示例一的基础上,再增加判断文件类型的功能,如果不是图片文件,则拒绝插入:
Dim
ext As String示例四
如果表中有多个图片型或文件型列,那么应该在BeforeAttachFile判断列名,例如要求照片列只能插入JPG文件,而且存放在名为"照片"的子目录中,简历列只能插入Word文件,而且存放在名为"简历"的子目录中:
Dim
ext As String示例五
假定表中有三列,分别是作者、拍摄日期、照片,希望向照片列添加文件的时候,自动根据作者和拍摄日期创建子目录来存放文件,例如作者张三在2010年度拍摄的照片存放在Attachments的子目录"张三\2010"下:
Dim
dr As DataRow = e.DataRow示例六
假定表中有两列,分别是身份证号码和照片,希望向照片列添加文件的时候,能自动根据身份证号码来重命名 此文件,为此可将BeforeAttachFile事件代码设置为:
Dim
dr As
DataRow = e.DataRow
If
dr.IsNull("身份证号码")
Then
MessageBox.Show("请先输入身份证号码!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel
= True
Else
e.FileName
= dr("身份证号码")
& ".jpg"
End
If