以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]列表项目及数据字典的BUG? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=1240) |
||||
-- 作者:菜鸟foxtable -- 发布时间:2008/11/25 15:33:00 -- [求助]列表项目及数据字典的BUG? 列表项目及数据字典是否存在BUG?如
我做了个ABC三个表,分别使用列表项目/数据字典自/定义项目来进行快速录入,由于数据量巨大,似乎不是假死就是不能实现. 请问如何实现只输入输入码即可快速录入疾病名称? 此主题相关图片如下:qq截图未命名.jpg [此贴子已经被作者于2008-11-25 15:36:37编辑过]
|
||||
-- 作者:don -- 发布时间:2008/11/25 16:20:00 -- DataColChanged事件: if e.Datacol.name = "疾病" Then Dim Da As DataTable = DataTables("疾病") Dim dr As DataRow Dim T1,T2 As String T1=e.DataRow("疾病") T2="[输入码] = \'" & T1 & "\'" IF "abcdefghijklmnopqrstuvwxyz".indexof(T1.Substring(0,1).ToLower())>-1 Then dr = Da.Find(T2) If dr IsNot Nothing Then e.DataRow("疾病") = dr("疾病名称") Else MessageBox.Show("『输入码』有誤!請檢查.", "提示") End If End If End If |
||||
-- 作者:狐狸爸爸 -- 发布时间:2008/11/25 16:23:00 -- 自动输入的实现
实现自动输入的基本原理是: 1、有一个基础数据表,输入所有的基础信息,例如订单管理系统中,产品表会输入所有的产品信息。 示例一 例如希望在订单表输入产品编号,能够从产品表提取该产品的名称、型号、规格,自动输入到订单表的相关列中。 If e.DataCol.Name = "产品编号" Then \'发生变化的是产品名称吗?\'在产品表找出该产品 Dim dr As DataRow = DataTables("产品").Find("编号 = " & "\'" & e.DataRow("产品编号") & "\'" ) If dr IsNot Nothing \'如果找到, 则设置各列内容 e.DataRow("品名")= dr("品名") e.DataRow("型号")= dr("型号") e.DataRow("规格")= dr("规格") End If End If 示例二 假定项目中有一个名为“行政区域”的基础数据表,分别是省市、市县、区号、邮编,这个表已经输入了全国所有县级行政区域的资料;现在我们在客户表中输入数据,假定客户表也有这么四列,希望输入省市、县市两列的内容后,区号、邮编能够自动输入。 为实现此目的,可在客户表的DataColChanged事件中输入如下代码: \'如果刚刚输入的不是省市或县市列 If e.DataCol.Name <> "省市" AndAlso e.DataCol.Name <> "县市" Then Return \'则返回 End If \'如果省市或县市列的内容为空 If e.DataRow.IsNull("省市") OrElse e.DataRow.IsNull("县市") Then \'则清除区号和邮编两列的内容 e.DataRow("区号") = Nothing e.DataRow("邮编") = Nothing Return \'然后返回 End If Dim dr As DataRow \'在行政区域表查找所输入省市?县市的行 dr = DataTables("行政区域").Find("[省市] = \'" & e.DataRow("省市") & "\' And [县市] = \'" & e.DataRow("县市") & "\'") If dr IsNot Nothing Then \'如果找到 \'将找到行的区号?邮编内容填入到正在输入的行中. e.DataRow("区号") = dr("区号") \' e.DataRow("邮编") = dr("邮编") End If 代码有点长,但是逻辑很清晰,配合注释,你应该很容易理解。 |
||||
-- 作者:菜鸟foxtable -- 发布时间:2008/11/25 16:53:00 -- 谢谢FOX老爹指点,但如此一来数据字典不是成鸡肋了? |
||||
-- 作者:狐狸爸爸 -- 发布时间:2008/11/25 17:09:00 -- 以下是引用菜鸟foxtable在2008-11-25 16:53:00的发言:
谢谢FOX老爹指点,但如此一来数据字典不是成鸡肋了?
|
||||
-- 作者:blackzhu -- 发布时间:2008/11/25 17:13:00 -- 以下是引用don在2008-11-25 16:20:00的发言:
DataColChanged事件: if e.Datacol.name = "疾病" Then Dim Da As DataTable = DataTables("疾病") Dim dr As DataRow Dim T1,T2 As String T1=e.DataRow("疾病") T2="[输入码] = \'" & T1 & "\'" IF "abcdefghijklmnopqrstuvwxyz".indexof(T1.Substring(0,1).ToLower())>-1 Then dr = Da.Find(T2) If dr IsNot Nothing Then e.DataRow("疾病") = dr("疾病名称") Else MessageBox.Show("『输入码』有誤!請檢查.", "提示") End If End If End If 老大的代码总是简单实用,佩服。 |
||||
-- 作者:菜鸟foxtable -- 发布时间:2008/11/25 19:28:00 -- don老大的代码只能完全输入代码才能出现疾病名称,请问能否实现类似数据字典那样输入代码头几个字母就出现疾病名称选择吗? |
||||
-- 作者:don -- 发布时间:2008/11/26 9:44:00 -- 笨办法
|
||||
-- 作者:菜鸟foxtable -- 发布时间:2008/11/26 11:11:00 -- 办法真够笨的........只是把9000多列选择减少到9000/26=300多列选择.... [此贴子已经被作者于2008-11-26 11:14:57编辑过]
|
||||
-- 作者:don -- 发布时间:2008/11/26 11:48:00 -- 凡事总有个度吧,你不可能要求十万八万行形成列表能飞快起来!要学会变通!
IF T1.indexof("→") >-1 Then ElseIF Asc(T1) > 64 And Asc(T1) < 91 and Asc(Right(T1,2)) > 64 And Asc(Right(T1,2)) < 91 Then ElseIF Da.Find("[疾病名称] = \'" & T1 & "\'") is Nothing Then [此贴子已经被作者于2008-11-26 13:43:45编辑过]
|