以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  DataSource动态绑定问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=123298)

--  作者:z769036165
--  发布时间:2018/8/11 15:03:00
--  DataSource动态绑定问题
窗口加载后执行
e.Form.Controls("Table1").Table.DataSource  = Tables("明细_Table1").DataTable

其中Tables("明细_Table1")为主窗口的一个副本表,e.Form.Controls("Table1")为独立窗口的Table1表,如果Tables("明细_Table1")的主窗口第一次打开,然后打开独立窗口,上述代码能执行,结果在主窗口不关闭的情况下再次打开独立窗口结果报错,显示不存在名称为独立窗口_Table1的datatable ,请问这个是怎么回事?

--  作者:有点蓝
--  发布时间:2018/8/11 15:27:00
--  
没有必要这样用吧。

独立窗口的Table1表同样绑定同一个表,同样设置为副本,设置一样的筛选条件即可

--  作者:z769036165
--  发布时间:2018/8/11 15:30:00
--  
因为主窗口的Tables("明细_Table1")是从别的地方动态加载过来的,然后比较大,我需要每次打开是做查询选择,所以我的想法是在主窗口先加载,然后做个独立窗口加载这个表的内容,这样Tables("明细_Table1")就不用每次去加载,速度快很多。
--  作者:有点蓝
--  发布时间:2018/8/11 15:40:00
--  
如果数据量达到一定程度,独立窗口也不可能全部加载,这个不是办法。

可以通过几个方面优化一下查询速度
1、给数据库表加上合适的索引
2、查询条件尽量避免使用like,in,is null等等条件
3、查询的结果如果多,可以使用分页显示
4、尽量加上日期范围条件
5、如果查询的数据范围相对固定,比如以本月(/本季/本年)为主,可以把本月(/本季/本年)的数据一次性加载到一个主表/临时表中使用
[此贴子已经被作者于2018/8/11 15:39:51编辑过]

--  作者:z769036165
--  发布时间:2018/8/11 15:49:00
--  
目前主窗口的Tables("明细_Table1")加载的话大概是2秒左右,但是我先加载后,用独立窗口再加载主窗口已经加载数据的话,速度基本是秒开,加载过来的数据在1万条左右。我目前就是想实现这个,但是不知道怎么第一次能加载,第二次他就报错。
--  作者:有点蓝
--  发布时间:2018/8/11 16:01:00
--  
不能这样使用的。既然经常要用,为什么不直接作为主表加载?主表可以设置为初始不加载,需要的时候加载一次
--  作者:z769036165
--  发布时间:2018/8/13 8:41:00
--  
我倒是想主表加载,是MYSQL的数据库,可是狐表目前不支持直接链接啊 
--  作者:有点甜
--  发布时间:2018/8/13 10:56:00
--  

变通处理一下,加上红字代码

 

forms("窗口2").show
Dim str_Conn As String = "server=voyo;uid=sa;pwd=hailun.;database=test"
Dim conn As New System.Data.SqlClient.sqlConnection(str_Conn)
conn.Open()
Dim mda As New System.Data.SqlClient.SQLDataAdapter("select * from table_1" , conn) \'这里可以设置你的查询语句
Dim ds As New System.Data.DataSet()
mda.Fill(ds, "TableTemp") \'MySQLDataAdapter方法把数据放到一个新建的临时表里,这个临时表名可自定义,我这里写TableTemp
forms("窗口2").controls("Table1").Table.DataSource = ds.Tables("TableTemp") \'把刚才的临时表TableTemp填充到我们的控件Table1里
conn.Colse

 

forms("窗口1").show
forms("窗口1").controls("Table1").Table.DataSource = forms("窗口2").controls("Table1").Table.DataTable
forms("窗口2").controls("Table1").Table.DataSource = forms("窗口1").controls("Table1").Table.DataTable

 

 

 


 


--  作者:z769036165
--  发布时间:2018/8/13 14:31:00
--  
谢谢,照此方法,问题解决了!
[此贴子已经被作者于2018/8/13 14:31:03编辑过]