单元格多行内容的处理
我们知道,多文件列可以管理多个文件,图片列可以管理多个图片。
也就是说,这些列的单元格,可能会有多行的内容,每行对应一个文件。
DataRow提供了一个Lines属性,该属性以字符集合的形式返回或设置单元格内容。
Lines属性的出现,可以让我们以非常轻松的方式处理单元格的多行文本内容。
示例一
假定表中有两列,列名分别为“文件”和“数量”,前者是多文件型,希望在每行的数量列统计出文件的数量。
为此,可将DataColChanged事件代码设置为:
If
e.DataCol.name
= "文件"
Then
Dim fls
As List(of
String)
fls = e.DataRow.Lines("文件")
e.DataRow("数量")
= fls.Count
End
If
示例二
如果希望每行的文件列至少保留一个文件,也就是当只剩下一个文件的时候,禁止删除文件。
为此可以将BeforeDeleteFile事件代码设置为:
If
e.DataCol.name
= "文件"
Then
If e.DataRow.Lines("文件").Count
= 1 Then
MessageBox.Show("至少要保留一个文件!",
"提示",
MessageBoxButtons.OK,
MessageBoxIcon.Information)
e.cancel
= True
End
If
End
If
示例三
也可以直接以字符集合的形式给单元格赋值,例如从目录“c:\data”下取得所有文件,赋值给文件列:
Dim
lst
As
New
List(of
String)
For Each
fl
As
String
In
FileSys.GetFiles("c:\data")
lst.Add(fl)
Next
Tables("表A").Current.DataRow.Lines("文件")
=
lst
再例如,从文件列中删除一个文件:
Dim
lst
As
New
List(of
String)
lst =
Tables("表A").Current.DataRow.Lines("文件")
lst.Remove("明细.xls")
Tables("表A").Current.DataRow.Lines("文件")
=
lst
或者增加一个文件:
Dim
lst
As
New
List(of
String)
lst =
Tables("表A").Current.DataRow.Lines("文件")
lst.Add("明细.xls")
Tables("表A").Current.DataRow.Lines("文件")
=
lst
有了Lines属性,我们可以非常灵活地处理文件列和图片列了。
示例四
Foxtable通过文件列和图片列,可以很方便地管理文件和图片,如果想自己设计一个按钮,单击此按钮可以 向列中增加文件,可以参考下面的代码:
Dim
dlg As
New OpenFileDialog
'定义一个新的OpenFileDialog
dlg.Filter=
"图形文件|*.bmp;*.jpg;*.gif"
'设置筛选器
If
dlg.ShowDialog
= DialogResult.Ok
Then '如果用户单击了确定按钮
Dim dr
As DataRow =
Tables("表A").Current.DataRow
Dim lst
As List(of
String) = dr.Lines("文件")
'获取文件集合
lst.Add(Filesys.GetName(dlg.FileName))
'给集合增加一个文件
dr.Lines("文件")
= lst
'将新的集合赋值给文件列
If dlg.FileName.ToLower.StartsWith((ProjectPath
& "Attachments").ToLower)
= False Then
'如果文件不在Attachments目录
FileSys.CopyFile(dlg.FileName,ProjectPath
& "Attachments\"
& Filesys.GetName(dlg.FileName),True)
'那么复制到Attachments目录
End If
End
If