老师,我在学习以下代码中,有个问题:当后台数据更新后,
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