以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  含有复选框表的窗口的多窗口调用问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=81024)

--  作者:judyhu2008
--  发布时间:2016/2/16 17:42:00
--  含有复选框表的窗口的多窗口调用问题
我有一个存货选择窗口,想在采购订单、销售订单和生产记录中,需要用到存货相关信息时,都可以调用存货选择窗口。

现在在存货选择窗口放了个确认键,如果确认,则把信息调用到采购订单表中。
但问题来了,在存货选择窗口的确认建的CLICK事件,我需要写把数据调用到哪个窗口。
Dim Cols1() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
Dim Cols2() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
For Each r1 As Row In Tables("存货选择_table1").GetCheckedRows
    For i As Integer = 0 To Cols1.Length -1
        Dim r2 As Row = Tables("订单明细").Current
        r2(Cols2(i)) = r1(Cols1(i))
    Next
Next
Forms("存货选择").close

如上,有没有办法,可以让这个确认按钮,同时对其它几个窗口调用的时候有效呢,而不是只能指定一个窗口。

--  作者:大红袍
--  发布时间:2016/2/16 18:23:00
--  

打开窗口的时候,用变量记录其值,如

 

vars("表名") = "订单明细"

Forms("存货选择").Open

 

---------------

 

然后这样写代码

 

Dim r2 As Row = Tables(vars("表名")).Current


--  作者:judyhu2008
--  发布时间:2016/2/16 20:30:00
--  
谢谢大红袍老师,总是很及时,很帮助 :)

我上面的代码,只能复制一行到选定的表中,如果想复制所有选中的行到选定的表中,需要如何写啊?

--  作者:judyhu2008
--  发布时间:2016/2/16 20:57:00
--  
Dim Cols1() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
Dim Cols2() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
For Each r1 As Row In Tables("存货选择_table1").GetCheckedRows
    Dim r2 As Row = Tables(vars("表名")).current
    For i As Integer = 0 To Cols1.Length -1
        r2(Cols2(i)) = r1(Cols1(i))
    Next
    Tables(vars("表名")).AddNew
Next
Forms("存货选择").close

我写出以上代码,也可以用了,但是都会多出一行,想着用DO LOOP语句应该可以解决问题。
还是请大红袍老师帮我看看吧

--  作者:大红袍
--  发布时间:2016/2/16 21:09:00
--  
Dim Cols1() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
Dim Cols2() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
For Each r1 As Row In Tables("存货选择_table1").GetCheckedRows
    Dim r2 As Row = Tables(vars("表名")).AddNew
    For i As Integer = 0 To Cols1.Length -1
        r2(Cols2(i)) = r1(Cols1(i))
    Next
Next
Forms("存货选择").close

--  作者:judyhu2008
--  发布时间:2016/2/16 21:15:00
--  
好像不行,变成第一行是空行了
因为CURRENT那行没有被赋值,然后多新增一行了,难道要先写DELETE一行?
[此贴子已经被作者于2016/2/16 21:20:46编辑过]

--  作者:大红袍
--  发布时间:2016/2/16 22:17:00
--  

Dim Cols1() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
Dim Cols2() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
For Each r1 As Row In Tables("存货选择_table1").GetCheckedRows
    Dim t As Table = Tables(vars("表名"))
    Dim r2 As Row = iif(t.current Is Nothing OrElse t.Current.Index = t.Rows.Count-1, t.AddNew, t.Current)
    For i As Integer = 0 To Cols1.Length -1
        r2(Cols2(i)) = r1(Cols1(i))
    Next
Next
Forms("存货选择").close


--  作者:judyhu2008
--  发布时间:2016/2/16 22:30:00
--  
Dim r2 As Row = iif(t.current Is Nothing OrElse t.Current.Index = t.Rows.Count-1, t.AddNew, t.Current)

比如我复选了三行,按这个代码,第一次的当前行还是会空出,后面再增加三行;
我把t.addnew和t.current换一个位置,那第一次的当前行是会被赋值,但增加的第三行则为空了。

其实正常来说,就算我当前行是有值的,我在当前行选择存货,从当前行到第三行,是先给当时行赋值,再增加两行就可以了。
逻辑我明白,就是不知道FT怎么写。


--  作者:大红袍
--  发布时间:2016/2/16 22:36:00
--  
Dim Cols1() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
Dim Cols2() As String = {"存货编码","存货中文名","规格型号","品牌","主计量单位"}
Dim count As Integer = 0
For Each r1 As Row In Tables("存货选择_table1").GetCheckedRows
    Dim t As Table = Tables(vars("表名"))
    Dim r2 As Row = iif(count = 0, t.current, t.addnew)
    count += 1
    For i As Integer = 0 To Cols1.Length -1
        r2(Cols2(i)) = r1(Cols1(i))
    Next
Next
Forms("存货选择").close

 


--  作者:judyhu2008
--  发布时间:2016/2/16 22:54:00
--  
用这个代码,第二行会出现空行。复选框的值是都写入到表中了。
但是多增加了一行,且第二行都是为空。

如我只复选了一行,但执行这个代码后,除了复选框的内容写入到表中,还会新增加一个空行。

对不起,老师,我的系统东西太多了,数据也都已经弄好。不方便传上去,否则可能你一次就搞定了。
代码,我看上去也是没有问题的,不知道是什么情况。
[此贴子已经被作者于2016/2/16 22:57:45编辑过]