以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  屏幕闪烁的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99985)

--  作者:happyft
--  发布时间:2017/5/2 11:52:00
--  屏幕闪烁的问题
用查询表的数据绑定到当前表中,如下代码:
Dim cmd As New SQLCommand
cmd.ConnectionName = Mydata
cmd.CommandText = "Se lect Count(*) From " & tbn & " where " & Filter
cmd.CommandText = sql
Dim dt As DataTable = cmd.ExecuteReader()

Tables(wn & "_主表").DataSource = dt

用了下面这些代码都会导致屏幕或者表闪烁,
DataTables(wn & "_主表").DataCols.Add("选择", Gettype(Boolean))
Tables(wn & "_主表").Cols("选择").Move(0)
Tables(wn & "_主表").Cols("选择").Width = 40
---设置表中各列宽
Dim Csx As String
If dr("showCols") > "" Then
    Csx = dr("showCols")
    Tables(wn & "_主表").SetColVisibleWidth(Csx)
End If
Tables(wn & "_主表").AutoSizeHeaderRow() \'自动设置标题行高度
---如果指定了排序列则按其排序
If dr("sortCols") > "" Then
   Tables(wn & "_主表").StopRedraw  \'停止绘制防闪屏
   Tables(wn & "_主表").sort = dr("sortCols")
 Tables(wn & "_主表").ResumeRedraw
End If

分别使用了
Tables(wn & "_主表").StopRedraw,  Forms(e.form.name).StopRedraw,    LockBaseMainForm三种方式都解决不了,

有什么办法,还有什么办法?  谢谢!


--  作者:有点色
--  发布时间:2017/5/2 12:36:00
--  

 指定的时候,要在你红色代码那里开始指定。

 

 实例说明。


--  作者:HappyFt
--  发布时间:2017/5/2 16:39:00
--  
当然都有写在当中,上传一个例子,在目录树中点击加载所有和其他就看的出来了

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:闪屏test.rar



--  作者:有点色
--  发布时间:2017/5/2 17:09:00
--  

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:闪屏test.zip

 


 


--  作者:HappyFt
--  发布时间:2017/5/3 9:26:00
--  
同样的代码加到实际的表中,屏幕还是闪烁,后来发现是查询绑定的currentchanged中有如下代码造成的

\'---根据当前行的产品编码加载工序明细表的数据
Dim dr As DataRow = DataTables("QtbSet").Find("WintbN = \'" & e.Form.name & "_工序明细\' and Key is not null")
If dr IsNot Nothing Then
    sql = "Se lect * from dbo." & dr("Key") & "(\'" & r("产品编码") & "\')"
    cmd.CommandText = sql
    Dim dt As DataTable = cmd.ExecuteReader()
    Dim tbl As Table = Tables(e.Table.form.name & "_工序明细")
    \'tbl.StopRedraw
    tbl.DataSource = dt
    \' tbl.Fill(sql,Mydata,True)  \'如果用fill的方式就会闪屏,加上stopRedraw的代码也没有用,

    Functions.Execute("tablestyle",wn,wn & "_工序明细",dr) \'传入参数执行函数显示表的小数位,列宽,行高及合计
    \' tbl.ResumeRedraw
End If

如果用绑定的方式不加任何stopRedraw的代码也不闪,为什么 这样

用tbl.DataSource = dt   与 tbl.Fill(sql,Mydata,True) \'查询表

这两种方式有什么不同? 目前我只知道两者都是不能直接保存,fill的表是锁定的,设置了allowedit也没用,绑定的可以修改表通过窗体上按钮等的代码可更新数据


--  作者:有点色
--  发布时间:2017/5/3 9:48:00
--  

 fill的话,可以是sqlTable或sqlQuery两种表,sqlTable是可以修改和保存的。

 

 dataSource的话,是副本表,看你本来的表,如果是数据表,自然能修改保存;如果是临时表、查询表、统计表等等,最后数据不能保存。


--  作者:HappyFt
--  发布时间:2017/5/5 11:37:00
--  
那用fill屏幕会闪烁有办法控制不闪吗,按例子中的用法不起作用
tbl.StopRedraw
tbl.DataSource = dt
 \' tbl.Fill(sql,Mydata,True)  \'如果用fill的方式就会闪屏,加上stopRedraw的代码也没有用,
tbl.ResumeRedraw

--  作者:有点色
--  发布时间:2017/5/5 11:40:00
--  

 窗口也要 StopRedraw

 

 如果StopRedraw都不行的话,你尝试隐藏显示表。