以文本方式查看主题

-  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=42988)

--  作者:Liangcai
--  发布时间:2013/11/27 16:26:00
--  自动复制


图片点击可在新窗口打开查看此主题相关图片如下:入库.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:库存.png
图片点击可在新窗口打开查看

固定资产入库表有数量列,当输入3时固定资产库存表增加3行,固定资产库存表:入库单号、名称、规格 等于固定资产入库:入库单号、名称、规格,如果修改固定资产入库表数量列能自动更新,数量列输入2时固定资产库存表为2行。

我写了代码,只能增加行不能更新,并且 入库单号、名称、规格 只能复制增加的第一行

If e.DataCol.Name = "数量" Then
    If e.DataRow.Isnull("数量") = False
    Dim n As Integer = e.DataRow("数量")
    Dim nma() As String = {"入库单号","名称","规格"}
    Dim nmb() As String = {"入库单号","名称","规格"}
    Dim dr As DataRow = DataTables("固定资产库存").AddNew(n)
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
  End If
End If

请指教代码,谢谢

[此贴子已经被作者于2013-11-27 16:28:38编辑过]

--  作者:Bin
--  发布时间:2013/11/27 16:32:00
--  
If e.DataCol.Name = "数量" Then
    If e.DataRow.Isnull("数量") = False
    Dim n As Integer = e.DataRow("数量")
    Dim nma() As String = {"入库单号","名称","规格"}
    Dim nmb() As String = {"入库单号","名称","规格"}
    dim drlist as List(of datarow) = DataTables("固定资产库存").select("入库单号=\'" & e.datarow("入库单号") & "\'")
    if drlist is nothing then
    for i as integer = 1 to n then
    Dim dr As DataRow = DataTables("固定资产库存").AddNew()
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
    next
    else
    if drlist.count>n then
       for i as integer=0 to drlist.count-n-1
           drlist(i).Delete
       next
    end if
    end if
  End If
End If

--  作者:狐狸爸爸
--  发布时间:2013/11/27 16:35:00
--  

建议:

1、两个表通过入库单号建立关联,固定资产入库表为父表,固定资产库存表为子表。

2、固定资产库存表的名称、规格改为表达式列,用表达式引用父表数据:

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

 

3、自动增加删除行的代码改为:

 

If e.DataCol.Name = "数量" OrElse e.DataCol.name = "入库单号" Then
    If e.DataRow.Isnull("数量") = False Then
        Dim n As Integer = e.DataRow("数量")
        Dim drs As List(of DataRow) = e.DataRow.GetChildRows("固定资产库存表")
        If drs.count > n Then
            For i As Integer = n  To drs.count - 1
                drs(i).delete
            Next
        Else
            For i As Integer = 0 To drs.count - 1
                Dim dr As DataRow = DataTables("固定资产库存").AddNew
                dr("入库单号") = e.DataRow("入库单号")
            Next
        End If
    End If
End If

 


--  作者:Liangcai
--  发布时间:2013/11/27 18:13:00
--  

出现错误


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20131127181115.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2013/11/27 19:04:00
--  
 呃,楼主,你把 then 去掉就行了

If e.DataCol.Name = "数量" Then
    If e.DataRow.Isnull("数量") = False
    Dim n As Integer = e.DataRow("数量")
    Dim nma() As String = {"入库单号","名称","规格"}
    Dim nmb() As String = {"入库单号","名称","规格"}
    dim drlist as List(of datarow) = DataTables("固定资产库存").select("入库单号=\'" & e.datarow("入库单号") & "\'")
    if drlist is nothing then
    for i as integer = 1 to n
    Dim dr As DataRow = DataTables("固定资产库存").AddNew()
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
    next
    else
    if drlist.count>n then
       for i as integer=0 to drlist.count-n-1
           drlist(i).Delete
       next
    end if
    end if
  End If
End If

--  作者:Liangcai
--  发布时间:2013/11/27 19:18:00
--  

For i As Integer = 1 To n 去掉出现这样


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20131127191558.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2013-11-27 19:18:30编辑过]

--  作者:有点甜
--  发布时间:2013/11/27 19:25:00
--  
 试试这样

If e.DataCol.Name = "数量" Then
    If e.DataRow.Isnull("数量") = False
        Dim n As Integer = e.DataRow("数量")
        Dim nma() As String = {"入库单号","名称","规格"}
        Dim nmb() As String = {"入库单号","名称","规格"}
        dim drlist as List(of datarow) = DataTables("固定资产库存").Select("入库单号=\'" & e.DataRow("入库单号") & "\'")
        If drlist Is Nothing Then
            For i As Integer = 1 To n
                Dim dr As DataRow = DataTables("固定资产库存").AddNew()
                For j As Integer = 0 To nma.Length - 1
                    dr(nmb(j)) = e.DataRow(nma(j))
                Next
            Next
        Else
            If drlist.count>n Then
                For i As Integer=0 To drlist.count-n-1
                    drlist(i).Delete
                Next
            End If
        End If
    End If
End If

--  作者:Liangcai
--  发布时间:2013/11/27 19:35:00
--  

也不行

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


--  作者:有点甜
--  发布时间:2013/11/27 20:08:00
--  
 代码如下

If e.DataCol.Name = "数量" Then
    If e.DataRow.Isnull("数量") = False
        Dim n As Integer = e.DataRow("数量")
        Dim nma() As String = {"入库单号","名称","规格"}
        Dim nmb() As String = {"入库单号","名称","规格"}
        dim drlist as List(of datarow) = DataTables("固定资产库存").Select("入库单号=\'" & e.DataRow("入库单号") & "\'")
        If drlist.count <= n Then
            For i As Integer = 1 To n - drlist.count
                Dim dr As DataRow = DataTables("固定资产库存").AddNew()
                For j As Integer = 0 To nma.Length - 1
                    dr(nmb(j)) = e.DataRow(nma(j))
                Next
            Next
        Else
            For i As Integer=0 To drlist.count-n-1
                drlist(i).Delete
            Next
        End If
    End If
End If
[此贴子已经被作者于2013-11-27 20:11:43编辑过]

--  作者:Liangcai
--  发布时间:2013/11/27 20:15:00
--  

太谢谢