以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]选择数据问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=90839)

--  作者:hero_xinyu
--  发布时间:2016/9/22 16:26:00
--  [求助]选择数据问题

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看
如果数据库中存在两个同名的简称,无论怎样选择,能只能添加第一条数据,第二条添加不上
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:需要解决问题2 - 副本.rar


[此贴子已经被作者于2016/9/22 16:26:48编辑过]

--  作者:有点蓝
--  发布时间:2016/9/22 16:43:00
--  
测试没有问题
--  作者:hero_xinyu
--  发布时间:2016/9/22 16:47:00
--  
按照我的例子来讲,我选择添加不了第二个444厂,也就是河南分厂那条数据
--  作者:hero_xinyu
--  发布时间:2016/9/22 17:04:00
--  
这个在我这边测试,如果下拉列表中有两条简称一样的,就是添加不了第二条的数据,双击添加的都是第一条数据
--  作者:有点蓝
--  发布时间:2016/9/22 17:20:00
--  
测试没有问题,项目1的值是有变化的
--  作者:hero_xinyu
--  发布时间:2016/9/23 1:46:00
--  
我再试试 我测试好多次 项目1值无变化 都是第一条数据
--  作者:狐狸爸爸
--  发布时间:2016/9/23 8:23:00
--  

确实选择的是第一条,原因很简单,你看看你的代码:

 

If e.DataCol.name = "简称"
    If e.DataRow.isnull("简称") = False
        Dim s As String = e.DataRow("简称")
        Dim dr As DataRow = DataTables("工厂信息表").find("简称 = \'" & s & "\'")
        If dr IsNot Nothing
            e.DataRow("项目1")= dr("项目1")
            e.DataRow("项目2")= dr("项目2")
            e.DataRow("项目3")= dr("项目3")
        End If
    Else
        e.DataRow("项目1")= Nothing
        e.DataRow("项目2")= Nothing
        e.DataRow("项目3")= Nothing
    End If
End If

 

你用的是工厂简称,简称会重名,你应该用不重复的列,例如工厂ID列来区分不同的行。
我们区分一个人,不会用姓名区分,因为重名的太多,只能用身份证号码。

别人给你写的代码,你要去理解,否则给你写再多,你也没有办法进步,学会了1+1,换成1+2就不知道怎么算了。

 

还有你这样设计系统,以后能用吗?
逻辑都没有搞清楚,自己取的分厂名称,会出现重名? 你这不是和自己过不去吗?

如果不会重名,你在这里折腾什么?

如果会重名,为什么要根据名称来设计,为什么不改用ID?

如果会重名,凭证表不增加一个工厂ID列,那么用户看到444厂,怎么知道是那个444厂?

 

先理清楚自己的业务逻辑,再来设计,你自己对于需求都稀里糊涂,别人对你的帮助意义又何在?

 

 

[此贴子已经被作者于2016/9/23 8:53:35编辑过]

--  作者:狐狸爸爸
--  发布时间:2016/9/23 8:45:00
--  

我帮你改了一下:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:需要解决问题2 - 副本.rar

1、凭证表增加一个"工厂ID"列,整数型

 

2、凭证表的DataColchanged事件改为:

 

If e.DataCol.name = "工厂ID"
    If e.DataRow.isnull("工厂ID") = False
        Dim s As String = e.DataRow("工厂ID")
        Dim dr As DataRow = DataTables("工厂信息表").find("ID = " & s )
        If dr IsNot Nothing
            e.DataRow("简称")= dr("简称")
            e.DataRow("项目1")= dr("项目1")
            e.DataRow("项目2")= dr("项目2")
            e.DataRow("项目3")= dr("项目3")
        End If
    Else
        e.DataRow("简称")= Nothing
        e.DataRow("项目1")= Nothing
        e.DataRow("项目2")= Nothing
        e.DataRow("项目3")= Nothing
    End If
End If

 

3、下拉窗口的DropDownClosed事件代码改为:

If e.Selected Then \'如果选择了值
    Dim tbl As Table = Tables("窗口1_Table1")
    If tbl.Current IsNot Nothing Then
        e.Form.DropDownBox.Value = tbl.Current("简称")
        Tables("凭证表").Current("工厂ID") = tbl.Current("ID")
        Tables("凭证表").Current("项目1") = tbl.Current("项目1")
    End If
End If

 

 

建议先看视频教程:
http://pan.baidu.com/s/1cmPmnc


将开发指南视频下的《编程基础》《Foxtable编程》《事件编程》这三部分看完,这是重点。

[此贴子已经被作者于2016/9/23 8:59:58编辑过]

--  作者:hero_xinyu
--  发布时间:2016/9/23 8:57:00
--  
这个附件是我单独做出来需要解决问题的,当时没有考虑会有重名情况,在原有系统中,项目1代表银行开 户 名称,项目2代表开户账号,项目3代表开 户 银 行,实际操作中,工厂有几百家,今年开始有部门厂家新增了其它银 行的信息,比如444厂,既有农 行 开 户的,又有中行开 户的,就会出现两条一样简称的,操作员录入的时候没有把简称区别开,就会造成这种。
[此贴子已经被作者于2016/9/23 8:57:50编辑过]

--  作者:狐狸爸爸
--  发布时间:2016/9/23 8:58:00
--  
看8楼