Foxtable(狐表)用户栏目专家坐堂 → [讨论]帮助里的自动输入案例存在不完善


  共有2522人关注过本帖树形打印复制链接

主题:[讨论]帮助里的自动输入案例存在不完善

帅哥哟,离线,有人找我吗?
乡里出城
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:426 积分:3505 威望:0 精华:0 注册:2015/4/17 9:13:00
[讨论]帮助里的自动输入案例存在不完善  发帖心情 Post By:2015/10/10 22:28:00 [只看该作者]

综合示例

本示例请参考CaseStudy目录下的示例文件“自动输入.Table”。



三、客户表的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 = DataTables("行政区域").Find(
Filter) '在行政区域表查找所输入省市和县市的行
    If
dr IsNot Nothing Then '如果找到
        '将找到行的区号和邮编内容填入到正在输入的行中

        e.DataRow("区号") = dr("区号")
        e.DataRow("邮编") = dr("邮编")
    Else
       
'否则清除区号和邮编两列的内容
        e.DataRow("区号") = Nothing
        e.DataRow("邮编") = Nothing
    End
If
End
If


以上代码不算很谨慎,如下图,(上不了图,WIN10上不了附件),

不足的是案例里的先选省市为广东省,县市可以选择为广州市,然后再把省市改成黑龙江省,这时的县市还是广州市,请问应该怎么完善,当省里改成黑龙江省后,不符合条件的广州市应该自动为空值,谢谢。




 回到顶部
帅哥哟,离线,有人找我吗?
kite
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:32 积分:397 威望:0 精华:0 注册:2015/9/1 0:55:00
  发帖心情 Post By:2015/10/10 23:50:00 [只看该作者]

更多的时候,列表项目来自于某个表中已经输入的记录,例如客户表已经输入所有的客户名称及资料,那么订单表的客户名称列的列表项目,应该自动从客户表的客户名称列提取。

如果列表项目来自于某个表的某一列,而这个表会经常增加删除行;那么可以在项目事件MainTableChanged中,设置代码提取列表项目。

例如:

If MainTable.Name = "订单" Then '如果选择的主表是订单表
    Tables("订单").Cols("客户").Combolist = DataTables("客户").GetComboListString("公司名称")
End
If

上面的代码从客户表提取公司名称,作为订单表客户列的列表项目,由于经常会增加删除客户,所以我们将上面的代码设置在MainTableChanged事件中,这样每次切换到订单表,就会重新设置订单表客户列的列表项目,保证其内容是最新的。

如果某列的列表项目不仅来自于另一个表,而且要根据其它列已经输入的内容来决定显示哪些条目,那么这样的代码就只能设置在表事件PrepareEdit中。

例如:

If e.IsFocusCell Then '如果是焦点所在单元格
   
If e.Col.Name = "县市" Then '如果正在编辑的是县市列
        '从行政区域表提取该省市的县市作为列表项目

        e.Col.Combolist =
DataTables("行政区域").GetComboListString("县市", "[省市] = '" & e.Row("省市") & "'")
   
End If
End
If

上面的代码,根据省市列输入的内容,从行政区域表提取该省市的所有县市,作为县市列的列表项目,这种根据另一列内容来刷新列表项目的代码,必须设置在PrepareEdit事件中。

还有一个最简单的情况,即列表项目来自于某个表的某一列,而这个来源表的内容基本上是固定的,很少机会增加或删除行,那么可以将代码设置在项目事件AfterOpenProject中。

例如:

Tables("客户").Cols("省市").Combolist = DataTables("行政区域").GetComboListString("省市")

上面的代码从行政区域表提取省市列的内容, 作为客户表省市列的列表项目,由于行政区域是固定的,基本上不需要增加删除行,所以从这个表中提取数据作为列表项目,代码可设置在AfterOpenProject事件中。


 回到顶部
帅哥哟,离线,有人找我吗?
kite
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:32 积分:397 威望:0 精华:0 注册:2015/9/1 0:55:00
  发帖心情 Post By:2015/10/10 23:50:00 [只看该作者]

希望能够帮到你

 


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/11 10:29:00 [只看该作者]

选择省以后,用省市合成一个条件去查,如果查不到,就把市改成空值即可。

 回到顶部
帅哥哟,离线,有人找我吗?
乡里出城
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:426 积分:3505 威望:0 精华:0 注册:2015/4/17 9:13:00
  发帖心情 Post By:2015/10/11 10:47:00 [只看该作者]

是的,我也是按你这样在直接在下面不符合条加个空值条件,谢谢。

 回到顶部