以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----    (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=113476)

--  作者:Springamy
--  发布时间:2018/1/16 17:10:00
--  表

 

 

Dim y As Integer = Date.Today.Year
Dim w As Integer = Date.Today.DayOfWeek \'算出今天是星期几
Dim t1 As Date = Date.Today.AddDays(-w) \'获取本周的第一天
Dim t2 As Date = Date.Today.AddDays(6 - w) \'获取本周的最后一天

Dim dt1 As Date = #1/1/2014#
Dim dt2 As Date = Date.Today
Dim s As String = "select .............\' order by d.rq"  \'已查出一堆数据存放在临时表中  有 编码 列
cmd.CommandText = s
Dim d As DataTable = cmd.ExecuteReader
Output.Show(s)


\'Dim dr1 As DataRow = d.DataRows
\'For Each dr2 As DataRow In DataTables("Table1").Select("编码 = \'" &  & "\'")

\'Next    我想要查找编码在临时表中是否有相同的编码怎么表示

 

 业务描述:

窗口按时间段加载每周的数据, 其中编码列 需要从 临时表中查找,如果没有重复的编码,表示是新编码,需要加样式以提示用户

但是在DrawCell中代码写太多了,很卡,请问有什么别的方法吗?

窗口中的表是SQLQuery

 


--  作者:有点甜
--  发布时间:2018/1/16 18:03:00
--  

1、临时表不要写到drawcell事件,尽量写在窗口AfterLoad事件。查出的临时表,用一个变量记录起来,如

 

cmd.CommandText = s
Dim d As DataTable = cmd.ExecuteReader
vars("临时表") = d

 

2、在你drawcell,查询临时表进行判断,如

 

Dim d As DataTable = vars("临时表")
Dim fdr As DataRow = d.Find("编号 = \'" & e.Row("编号") & "\'")
If fdr Is Nothing Then
    \'没有重复
End If


--  作者:Springamy
--  发布时间:2018/1/17 10:31:00
--  数据源的问题

Dim cmd As New SQLCommand
cmd.C
StatusBar.Message1= "正在加载数据,请稍等..."
Application.DoEvents

 

drawcell 代码:

Dim d As DataTable = vars("临时表")
Dim fdr As DataRow = d.Find("cpbm = \'" & e.Row("编码 ") & "\'")
If fdr Is Nothing Then
    \'没有重复
End If


 甜大大,现在还有一个问题就是 在afterload写,我的数据源不能灵活切换,

如下:在选择时间段之前我可以选择  测试账套\\ 广州账套\\北京账套  等等 对应不同的数据源

可是在窗口打开的同时还没有选择帐套,所以造成了编码不属于Table1的错误,如图二

 

因为打开窗口的时候还没有加载数据,(我也不知道是不是这个原因)

 

还需要怎么修改

 


此主题相关图片如下:1.png
按此在新窗口浏览图片


 


此主题相关图片如下:2.png
按此在新窗口浏览图片

--  作者:Springamy
--  发布时间:2018/1/17 10:33:00
--  
Dim cmd As New SQLCommand
cmd.C
StatusBar.Message1= "正在加载数据,请稍等..."
Application.DoEvents

--  作者:有点甜
--  发布时间:2018/1/17 10:37:00
--  

选择数据源之后,再生成vars("临时表")

 

vars没有值的时候,不处理drawcell事件,加一个判断

[此贴子已经被作者于2018/1/17 10:37:50编辑过]

--  作者:Springamy
--  发布时间:2018/1/17 10:52:00
--  不是很懂

我不太理解你的意思,但我感觉我应该是在把窗口中的数据加载完之后才能跟vars("临时表")比对数据吧

 


--  作者:有点甜
--  发布时间:2018/1/17 10:55:00
--  

不理解你要做什么。有问题,做个实例发上来说明。

 

1、临时表不要在drawcell事件生成,请在另外某一个地方生成;

 

2、drawcell,在临时表没生成前,不要执行代码;

 

3、不会做上传实例。

 

 


--  作者:Springamy
--  发布时间:2018/1/17 11:04:00
--  怎么判断

嗯呐,谢谢甜大!

怎么判断临时表有没有生成.图片点击可在新窗口打开查看

 


--  作者:有点甜
--  发布时间:2018/1/17 11:11:00
--  
以下是引用Springamy在2018/1/17 11:04:00的发言:

嗯呐,谢谢甜大!

怎么判断临时表有没有生成.图片点击可在新窗口打开查看

 

 

1、可以另外用一个变量。

 

if vars("生成") = true Then

 

End If

 

2、你在另一个地方生成以后,就赋值为true

 

vars("生成") = True


--  作者:Springamy
--  发布时间:2018/1/17 14:09:00
--  

For i = 0 To d.DataRows.Count-1
    msgbox("执行了吗")
    Dim fdr As DataRow = dt.Find("编码 = \'" & d.DataRows(i)("cpbm") & "\'")
    msgbox("执行")
    If fdr Is Nothing Then
        fdr("是否NewBom") = "否"
       
    Else
        fdr("是否NewBom") = "是"
    End If
   
Next

 

dt 为窗口中加载的表,d是要查找的数据存放的临时表

 dt中加载了一周的数据.然后每个数据一一从d临时表中查找,看看是否有相同的编码

两个msgbox执行一个就报错了,显示为找到实例对象