以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=150317)

--  作者:leoli
--  发布时间:2020/5/26 22:37:00
--  [求助]
老师,我在学习以下代码中,有个问题:当后台数据更新后,

1. 这个ComboBox1 不会自动更新,需重新打开项目后才可更新,如何后更新后,ComboBox1中的内容也自动更新

2.这个ComboBox1不可以模糊查找,如何可以模糊查找这其中的内容?


临时表与全局变量

在实际开发的过程中,我们可以需要经常在代码中调用某个表的数据,但是又不需要在界面中显示这个表。
对于这种情况,我们可以使用临时表加载这个表的数据,同时将临时表保存在一个Public变量中,这样就可以在任何位置调用这个表,无需反复加载。

假定我们建立了一个外部数据源"Region",其中有个名为“行政区域”的基础数据表,这个表已经输入了全国所有县级行政区域的资料,包括省市、市县、区号、邮编四列。
我们不希望主界面中显示这个表,但是希望能随时通过代码调用这个表的数据。
当然我们可以正常加载这个表,然后将这个表的Visible属性设置为False即可,不过这次我们用临时表来解决:

1、首先在全局代码中定义一个Public变量

Public rdt As DataTable

2、在项目事件AfterOpenProject中设置代码:

Dim cmd As New SQLCommand
cmd
.ConnectionName = "region"
cmd
.CommandText = "Se lect * From {行政区域}"
rdt
= cmd.ExecuteReader()

3、现在我们可以在任何地方调用这个表的数据,例如窗口中有两个ComboBox控件,第一个ComboBox列出所有的省市,第二个ComboBox根据第一个ComboBox所选择的省市,列出该省市所有的县市。

首先将窗口的AfterLoad事件代码设置为:

e.Form.Controls("ComboBox1").ComboList = rdt.GetComboListString("省市")

然后将ComboBox2的Enter事件代码设置为:

Dim sh As String = e.Form.Controls("ComboBox1").value
e
.sender.ComboList = rdt.GetComboListString("县市","省市 = \'" & sh & "\'")


4、再例如希望在客户表中输入省市、县市两列后,区号和邮编能自动输入,可以将客户表的DataColChanged事件代码设置为:

If e.DataCol.Name = "省市" Orelse e.DataCol.Name = "县市" Then
    Dim
dr As DataRow
   
Dim Filter As
String
    Filter = "[省市] = \'" & e.DataRow("省市") & "\' And [县市] = \'" & e.DataRow("县市") & "\'"
    dr = rdt.Find(
Filter)
    If
dr IsNot Nothing Then
        e.DataRow("区号") = dr("区号")
        e.DataRow("邮编") = dr("邮编")
    Else
        e.DataRow("区号") = Nothing
        e.DataRow("邮编") = Nothing
    End
If
End
If





--  作者:有点蓝
--  发布时间:2020/5/26 22:45:00
--  
1、ComboBox1,enter事件

e.sender.ComboList = rdt.sqlGetComboListString("省市")