以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于在窗口添加数据问题,请老师指教!  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=29278)

--  作者:wangcza
--  发布时间:2013/3/3 23:02:00
--  [求助]关于在窗口添加数据问题,请老师指教!

我想根据项目申报表的项目编号,来填写或查看项目预算内容,比如项目申报表有一个新增项目编号为“1001”的项目,我想打开项目预算窗口添加“1001”的预算内容,这样是没问题的,但我填写完后保存,再在项目预算项目编号下拉列表中选他想查看它的预算信息时,却出现重复添加项目编号为“1001”的数据。。。。

 

我是想当我在项目预算窗口的项目编号下拉列表中选一个项目编号时,如果工程预算表内没有这个项目编号,那就新增这个项目编号,如果这个项目编号已存在,就在显示它的相关信息。

 

菜鸟,代码写得不对,求老师指教.先谢谢了

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目管理2013.rar


--  作者:wangcza
--  发布时间:2013/3/4 8:14:00
--  
顶上去,求指导
--  作者:狐狸爸爸
--  发布时间:2013/3/4 9:27:00
--  

不是很明白你的意思。

如果想增加编号的时候,判断判断输入的编号是否存在,如果存在则提示,不存在则添加,可以将按钮代码改为:

 

Dim v  As string = e.Form.Controls(" 编号输入框").Value

If v > "" Then

    Dim dr As DataRow = DataTables("xxx").Find("编号 = \'" & V & "\'")

    If dr Is Nothing Then

           dr = DataTables("xxx").AddNew()

           dr("编号") = v

    Else

           MessageBox.Show("编号已经存在")

    End If

End If

 


--  作者:wangcza
--  发布时间:2013/3/5 0:11:00
--  

先谢谢狐爸爸,可能我表达得不是很清楚

换个方法来实现,可能这样你们也好理解我想实现什么功能:

工程预算窗口项目编号下拉列表,数据取自于申报登记表不重复的项目编号(这个实现了),如何实现我已经在预算窗口输入保存的项目编号,就不在工程预算窗口项目编号下拉列表中出现了,比如申报登记表项目编号有1001、1002、1003、1004,当我工程预算表没有任何数据的时候,我打开工程预算窗口项目编号下拉列表时,它就显示1001、1002、1003、1004,当我在工程预算窗口输入了1001项目编号和其相关数据保存到工程预算表后,再点工程预算窗口项目编号下拉列表时,就只显示1002、1003、1004这三个项目编号。


--  作者:双轨制
--  发布时间:2013/3/5 8:18:00
--  

假定列表框的项目来自表B的编号列,但是排除表A中已经输入的编号列。

可以这样设置下拉列表框的Enter事件:

 

Dim Vals1 As List(of String) = DataTables("表A").GetUniqueValues("","编号")
Dim Vals2 As List(of String) = DataTables("表B").GetUniqueValues("","编号")
Dim cmb As WinForm.ComboBox = e.Sender
cmb.Items.Clear
For Each val As String In vals2
    If vals1.Contains(val) = False Then
        cmb.Items.Add(val)
    End If
Next
   
 


--  作者:wangcza
--  发布时间:2013/3/5 9:17:00
--  
谢谢 双轨制,解决了
--  作者:wangcza
--  发布时间:2013/3/11 17:03:00
--  

假定列表框的项目来自表B的编号列,但是排除表A中已经输入的编号列。

可以这样设置下拉列表框的Enter事件:

 

Dim Vals1 As List(of String) = DataTables("表A").GetUniqueValues("","编号")
Dim Vals2 As List(of String) = DataTables("表B").GetUniqueValues("","编号")
Dim cmb As WinForm.ComboBox = e.Sender
cmb.Items.Clear
For Each val As String In vals2
    If vals1.Contains(val) = False Then
        cmb.Items.Add(val)
    End If
Next

下拉列表排除已输入的编号已解决,换成窗口Table的话代码要怎么改?


我有”申报登记表“和“结算表”2个表,“结算表”的编号来自”申报登记表“,假定我再做一个窗口1 Table1为”申报登记表“的副本,想开打窗口一时,Table1加载的数据能排除 “结算表” 中已有的编号。

怎么设置窗口的加载事件?


--  作者:狐狸爸爸
--  发布时间:2013/3/11 17:05:00
--  

换个说法,就是如何获得窗口Table对应的DataTable,你可以看看:

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

 


--  作者:wangcza
--  发布时间:2013/3/11 22:37:00
--  

........

看了帮助,但还是不懂得怎么做。。。。


--  作者:双轨制
--  发布时间:2013/3/11 22:44:00
--  

如果编号是字符型:

 

Dim ids As String
For Each dr As DataRow In DataTables("结算表").DataRows
   ids = ids & ",‘" & dr(“编号") & "\'"
Next
ids = ids.trim(",")
DataTables(”窗口1_Table1“).LoadFilter = "编号 In (" & ids & ")"

如果编号是整数:

 

Dim ids As String
For Each dr As DataRow In DataTables("结算表").DataRows
ids = ids & "," & dr(“编号")
Next
ids = ids.trim(",")
DataTables(”窗口1_Table1“).LoadFilter = "编号 In (" & ids & ")"