以文本方式查看主题 - 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 但是发现每次打开数据表都特费劲,很慢,而且每次都要改动数据表的数据,不知道有没有别的方式能够实现。
|
-- 作者:有点甜 -- 发布时间: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) 下面查找表数据如何查找呢?又要循环表数据吗?岂不是又全部循环一遍? |
-- 作者:有点甜 -- 发布时间:2017/8/1 17:13:00 -- 以下是引用天若千颖在2017/8/1 17:00:00的发言:
下面查找表数据如何查找呢?又要循环表数据吗?岂不是又全部循环一遍?
你可以直接find
Dim path As String = ProjectPath & "RemoteFiles\\" Dim fdr As Datarow = DataTables("表A").Find("资料名称 = \'" & name & "\'") |
-- 作者:天若千颖 -- 发布时间:2017/8/1 17:25:00 -- 多谢版主指导, Dim path As String = ProjectPath & "RemoteFiles\\" Dim fdr As Datarow = DataTables("表A").Find("资料名称 = \'" & name & "\'") 如果在资料名称的一列找到同名的本地文件,则该行“缓存”一列的值等于1,否则等于0.这个如何写?没有一点思路。 |
-- 作者:天若千颖 -- 发布时间:2017/8/1 17:31:00 -- Dim path As String = ProjectPath & "RemoteFiles\\" 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 |