呵呵,一个建议,不影响功能,但是涉及效率,特别是多用户网络环境下,影响会很大。
以会员资料的PrepareEdit事件为例,你的代码是:
If e.IsFocusCell Then
If e.Col.Name = "等级" Then
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "SELECT DISTINCT 等级名称 From {会员等级设置}"
dt = cmd.ExecuteReader
e.Col.Combolist = dt.GetComboListString("等级名称")
End If
End If
上面的代码每次当进入等级单元格,就要执行一次ExecuteReader,从后台提取数据,这样是不恰当的,因为会员等级是固定的,没有必要不停地连接服务器来提取数据,白白消耗宝贵的服务器资源。
其实这样的代码设置在CurrentTaleChanged事件代码比较好:
if CurrenTable.Name = "会员资料" Then
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = "SELECT DISTINCT 等级名称 From {会员等级设置}"
dt = cmd.ExecuteReader
Tables(会员资料).Cols("等级").Combolist = dt.GetComboListString("等级名称")
End If
类似的代码有很多,此外对于那些没有打算直接在表中输入的列,就没有必要设置这样的代码了。