动态设置文件存储位置

如果没有使用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
ext = e.FileName.SubString(e.FileName.LastIndexof(
".") + 1) '获得文件后缀名
Select
Case ext
    Case
"bmp","gif","jpg","png","tif",
"wmf"
        e.SubFolder = ext

    Case
Else
        MessageBox.Show(
"此列只能能插入图片文件!", "提示", MessageBoxButtons.OK,MessageBoxIcon.Information)
        e.Cancel = True
'取消插入
End
Select

示例四

如果表中有多个图片型或文件型列,那么应该在BeforeAttachFile判断列名,例如要求照片列只能插入JPG文件,而且存放在名为"照片"的子目录中,简历列只能插入Word文件,而且存放在名为"简历"的子目录中:

Dim ext As String
ext = e.FileName.SubString(e.FileName.LastIndexof(
".") + 1)
Select
Case e.DataCol.Name
    Case
"照片"
       
If ext = "jpg" Then
            e.SubFolder = ext

        Else

            MessageBox.Show(
"此列只能插入jpg文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
            e.Cancel =
True
       
End If
   
Case "简历"
       
If ext = "doc" Then
            e.SubFolder = ext

        Else

            MessageBox.Show(
"此列只能插入Word文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
            e.Cancel =
True
       
End If
End
Select

示例五

假定表中有三列,分别是作者、拍摄日期、照片,希望向照片列添加文件的时候,自动根据作者和拍摄日期创建子目录来存放文件,例如作者张三在2010年度拍摄的照片存放在Attachments的子目录"张三\2010"下:

Dim dr As DataRow = e.DataRow
If
dr.IsNull("拍摄日期") Or Dr.IsNull("作者") Then
    MessageBox.Show(
"拍摄日期和作者不能为空!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    e.Cancel =
True
Else

    e.SubFolder = dr(
"作者") & "\" & dr("拍摄日期").Year
End
If

示例六

假定表中有两列,分别是身份证号码和照片,希望向照片列添加文件的时候,能自动根据身份证号码来重命名 此文件,为此可将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


本页地址:http://www.foxtable.com/webhelp/topics/2209.htm