以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  这个需求该如何来实现  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=104594)

--  作者:天若千颖
--  发布时间:2017/8/1 15:21:00
--  这个需求该如何来实现
版主您好,我的资料模块想每次打开模块的时候,判断当前用户是否已经下载了这个资料,并在“缓存”这一列显示。

由于不同的用户的资料情况不同,所以该列的数据不能保存,只能根据每个客户端的情况判别,我在数据表的DrawCell中使用如下代码:

If e.Col.Name = "缓存" Then  \'请改为实际列名
For Each dr As DataRow In DataTables("项目资料表").DataRows
Dim path As String = ProjectPath & "RemoteFiles\\" & FileSys.GetName(dr("资料名称"))
If FileSys.FileExists(path) Then
dr("缓存")="1"
Else
dr("缓存")="0"
End If
Next
End If

但是发现每次打开数据表都特费劲,很慢,而且每次都要改动数据表的数据,不知道有没有别的方式能够实现。


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170801151649.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2017/8/1 15:27:00
--  

方法一:给缓存列赋值,但是不是写在drawcell事件,而是写在AfterLoadTableSetting。

 

方法二:加一列,或者直接在缓存列记录各个用户的信息,然后直接和user.name比较。


--  作者:天若千颖
--  发布时间:2017/8/1 15:42:00
--  
只有方案一了,这样可以每次对比是否本地存在,方案二只能记录是否已经下载。

如果每次都判断本地是否存在该文件,如果列表中有10万条数据,这个判断是不是也很费时?

--  作者:有点甜
--  发布时间:2017/8/1 15:59:00
--  

 回复3楼。

 

1、你加载的数据有10万行吗?你加载多少条就判断多少条;

 

2、你不需要每次打开的时候判断。之前判断过的,可以不判断了吧?值是存放起来的。如果想刷新,单独做个按钮刷新。


--  作者:天若千颖
--  发布时间:2017/8/1 16:20:00
--  
我的意思是,如果判断10万条数据,是不是会很费时,普通电脑会用多少时间?

每个客户的资料情况不一样,这个数据当然不能保存啊。我需要的是,在每个客户电脑上在这一列显示的是自己的情况。如果保存了,岂不是所有客户端都是一个结果?
[此贴子已经被作者于2017/8/1 16:21:27编辑过]

--  作者:有点甜
--  发布时间:2017/8/1 16:37:00
--  

1、算法优化。如果用户存放的文件较少,那可以循环用户的文件,查找表数据。如果用户存放的文件较多,那就循环表数据,查找文件。

 

2、为什么不能保存用户的信息?一个单元格,可以保存多个值,如 张三、李四、王五,然后判断。


--  作者:天若千颖
--  发布时间:2017/8/1 17:00:00
--  
当然是用户本地文件少,首先要判断用户目录下的文件,

Dim path As String = ProjectPath & "RemoteFiles\\"

For Each File As String In FileSys.GetFiles(path)
    Output.Show(File)  \'这里的结果带有 
ProjectPath & "RemoteFiles\\"路径
Next


下面查找表数据如何查找呢?又要循环表数据吗?岂不是又全部循环一遍?


--  作者:有点甜
--  发布时间:2017/8/1 17:13:00
--  
以下是引用天若千颖在2017/8/1 17:00:00的发言:


下面查找表数据如何查找呢?又要循环表数据吗?岂不是又全部循环一遍?

 

你可以直接find

 

Dim path As String = ProjectPath & "RemoteFiles\\"
For Each File As String In FileSys.GetFiles(path)
    Dim name As String = filesys.GetName(file)

    Dim fdr As Datarow = DataTables("表A").Find("资料名称 = \'" & name & "\'")
Next


--  作者:天若千颖
--  发布时间:2017/8/1 17:25:00
--  
多谢版主指导,

Dim path As String = ProjectPath & "RemoteFiles\\"
For Each File As String In FileSys.GetFiles(path)
    Dim name As String = filesys.GetName(file)

    Dim fdr As Datarow = DataTables("表A").Find("资料名称 = \'" & name & "\'")
Next


如果在资料名称的一列找到同名的本地文件,则该行“缓存”一列的值等于1,否则等于0.这个如何写?没有一点思路。


--  作者:天若千颖
--  发布时间:2017/8/1 17:31:00
--  

Dim path As String = ProjectPath & "RemoteFiles\\"
For Each File As String In FileSys.GetFiles(path)
    Dim name As String = filesys.GetName(file)

    Dim fdr As Datarow = DataTables("表A").Find("资料名称 = \'" & name & "\'")

    if fdr isnot Nothing then

    Datatables("表A").Rows(fdr)(“缓存”)=“0”

    else

      Datatables("表A").Rows(fdr)(“缓存”)=“1”

     End if

Next