以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]自动输入问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=12461)

--  作者:jackchen
--  发布时间:2011/9/4 12:58:00
--  [求助]自动输入问题

  我才发觉一个问题,

表属性中的datacolchanged 这个事件

   似乎是每次只要有一个数据变化,就会造成程序重复运行,效率很差,

我实验了系统自己带的“自动输入”案例

   在其中插入一些对话框,按照正常的思维,应该是从1->2->3->4 or 1->2->5->6 , 但实际上每次从1->2后,就会再次到1再到2,如果找到数据,就到3,这时候数据发生变化,又从1->2->4, 等于重复运行程序很多遍,这里面只有2行数据需要自动输入,如果是几十行数据要自动输入,那速度慢的好像蜗牛一样,

   做一个按钮来运行,可以解决这个重复运行问题,但是我希望是简单化,不想再用一个按钮,是否有其他方法? 我修改后的附件请看

 

 

  MessageBox.Show(1)
\'如果刚刚输入的是省市或县市列
If e.DataCol.Name = "省市" OrElse e.DataCol.Name = "县市" Then
    Dim dr As DataRow
    \'在行政区域表查找所输入省市和县市的行
    dr = DataTables("行政区域").Find("[省市] = \'" & e.DataRow("省市") & "\' And [县市] = \'" & e.DataRow("县市") & "\'")
    MessageBox.Show(2)
       If dr IsNot Nothing Then \'如果找到
        \'将找到行的区号?邮编内容填入到正在输入的行中.
        e.DataRow("区号") = dr("区号")
          MessageBox.Show(3)
        e.DataRow("邮编") = dr("邮编")
           MessageBox.Show(4)
    Else
        \'否则清除区号和邮编两列的内容
        e.DataRow("区号") = Nothing
             MessageBox.Show(5)
        e.DataRow("邮编") = Nothing
             MessageBox.Show(6)

    End If


--  作者:狐狸爸爸
--  发布时间:2011/9/4 13:16:00
--  

修改任何一列,1都会执行的,这是必须的。

以你的代码为例,修改县市列,会显示1、2,1、3、1、4,这是一个合理的过程。

只要DataColChanged事件中合理判断了列名,并不要担心存在效率问题:

 

http://www.foxtable.com/help/topics/1522.htm

 

[此贴子已经被作者于2011-9-4 13:19:10编辑过]

--  作者:jackchen
--  发布时间:2011/9/4 20:31:00
--  

哦,谢谢,但是总觉得每次都重复运行,效率会低啊,因为很明显的对比就是用一个按键触发 运行程序,就运行了一遍,用事件,就是重复,时间还是延长了,希望新版本可以改进