Foxtable(狐表)用户栏目专家坐堂 → 这个需求该如何来实现


  共有2103人关注过本帖树形打印复制链接

主题:这个需求该如何来实现

帅哥哟,离线,有人找我吗?
天若千颖
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
这个需求该如何来实现  发帖心情 Post By: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
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/1 15:27:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 15:42:00 [只看该作者]

只有方案一了,这样可以每次对比是否本地存在,方案二只能记录是否已经下载。

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/1 15:59:00 [只看该作者]

 回复3楼。

 

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/8/1 16:20:00 [只看该作者]

我的意思是,如果判断10万条数据,是不是会很费时,普通电脑会用多少时间?

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/1 16:37:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By: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


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


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By: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.这个如何写?没有一点思路。


 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By: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


 回到顶部
总数 15 1 2 下一页