以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于动态筛选的求助。(附件已加)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=17442)

--  作者:pc005637
--  发布时间:2012/3/13 15:36:00
--  关于动态筛选的求助。(附件已加)

如果取消,表AfterFilter事件就可以正常运行,Forms("动态筛选")

 

不取消,就提示出错。

比如:日期列先筛选出 2012年3月1日至2012年5月31日的数据。再筛选2012年1月1日至2012年2月20日的数据就出错了。

 

谢谢指点。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:动态筛选.table

[此贴子已经被作者于2012-3-13 15:38:43编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/3/13 16:22:00
--  

修改你的代码,应该改为:

 

Dim t As Table = CurrentTable
Dim dt1 As Date = e.Form.Controls("DateTimePicker1").Value
Dim dt2 As Date = e.Form.Controls("DateTimePicker2").Value
If e.Form.Controls("DateTimePicker1").Value Is Nothing OrElse e.Form.Controls("DateTimePicker2").Value Is Nothing Then
    MessageBox.Show("请输入开始日期和结束日期")
    Return
End If
If dt1 > dt2 Then
    MessageBox.Show("开始日期不能晚于结束日期")
    Return
End If
Dim filter As String = "日期" & " >= #" & dt1 & "# And " & "日期" & " <= #" & dt2 & "#"
t.Filter = filter

 

你原来根据选定列进行筛选,筛选后光标回到第一列,第一列又不是日期列,自然就出错了。

[此贴子已经被作者于2012-3-13 16:23:51编辑过]

--  作者:pc005637
--  发布时间:2012/3/13 17:00:00
--  再问一下。

如果我取消了AfterFilter事件的话,它是可以正常运行的啊!

 

做这个窗口主要是动态切换筛选字符和筛选日期列的。通过鼠标的点击,动态切换筛选的页面。

 

如果固定了筛选一列,不如不做。

 

能否测试后解决一下这个问题。谢谢。


--  作者:狐狸爸爸
--  发布时间:2012/3/13 17:07:00
--  

因为你的AfterFilter事件有下面红色的0:
 
e.Table.sort = "日期列,字符列"
Dim n As Integer = e.Table.Rows.Count
e.Table.Select(n-1,0)
 
也就是筛选后,每次都回到最后一行的第一列了。

 

你应该:

 

e.Table.sort = "日期列,字符列"
e.Table.Select(e.Table.Rows.Count-1,e.Table.ColSel)


--  作者:pc005637
--  发布时间:2012/3/13 17:11:00
--  非常感谢。
图片点击可在新窗口打开查看