单元格多行内容的处理

我们知道,多文件列可以管理多个文件,图片列可以管理多个图片。
也就是说,这些列的单元格,可能会有多行的内容,每行对应一个文件。

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

 


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