以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  这样的效果能达到吗  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=27823)

--  作者:zcw728909
--  发布时间:2013/1/11 11:52:00
--  这样的效果能达到吗

表3由表2的数据自动填充,且表3的内容会随着表2的更改而更新

表2有以下特点:

一、相同档案编号有不同或相同的颜色

二、档案编号相同而颜色不同的,序号、尺寸也不相同;档案编号相同且颜色相同的,尺寸和机型是一样的,序号开头是一样的,就是后面的字母不一样;某个颜色如果序号为空,那么尺寸和机型也都是空的

三、表二的档案编号列内容一旦输入就不能更改,除非把行删除掉。其余列的内容可以更改,更改后表3要能更新

表3有以下特点:

一、列是固定的,只有21个列,且第一个列名为档案编号,后面分别是:顺序1,顺序2......顺序20

二、表2的每个档案编号,在表3都要生成4行内容,分别对应的是表2的颜色、序号、尺寸和机型


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

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

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

[此贴子已经被作者于2013-1-11 13:29:59编辑过]

--  作者:lin_hailun
--  发布时间:2013/1/11 11:57:00
--  
 呃,很明细可以。没有做不到的。

 上传你的数据表吧。

--  作者:zcw728909
--  发布时间:2013/1/11 13:36:00
--  
刚开始网络不行,忘了上传项目了,我已经重新编辑了,将项目上传了
--  作者:lin_hailun
--  发布时间:2013/1/11 14:30:00
--  
把这段代码复制到命令窗口执行一下就行了。

Dim dt_source As DataTable = DataTables("表2")
Dim dt_target As DataTable = DataTables("表3")

dt_target.DataRows.Clear
For Each bh As String In dt_source.GetUniqueValues("", "档案编号")
    Dim drs(3) As DataRow
    drs(0) = dt_target.AddNew
    drs(1) = dt_target.AddNew
    drs(2) = dt_target.AddNew
    drs(3) = dt_target.AddNew
    For Each r As DataRow In drs
        r("档案编号") = bh
    Next
    Dim count As Integer = 1
    Dim xh As New Dictionary(Of String, Integer)
    For Each dr As DataRow In dt_source.Select("档案编号 = \'" & bh & "\'")
        drs(0)("顺序" & count) = dr("颜色")
        drs(2)("顺序" & count) = dr("尺寸")
        drs(3)("顺序" & count) = dr("机型")
        If xh.ContainsKey(dr("颜色")) Then
            drs(1)("顺序" & xh(dr("颜色"))) &= ";" & dr("序号")
        Else
            drs(1)("顺序" & count) = dr("序号")
            xh.Add(dr("颜色"), count)
            count += 1
        End If
    Next
Next
[此贴子已经被作者于2013-1-11 15:02:03编辑过]

--  作者:zcw728909
--  发布时间:2013/1/11 15:16:00
--  

谢谢了,我试一下


--  作者:zcw728909
--  发布时间:2013/1/12 10:23:00
--  

我把上面的代码放在了表2的DataColChanged事件中

发现了几个问题:

1.当表2中相同档案编号的颜色只有一种颜色,且这种颜色有两个或两个以上序号,表3生成有错误,见图:


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

图片点击可在新窗口打开查看此主题相关图片如下:012.jpg
图片点击可在新窗口打开查看
2.我修改表2中的任意内容(档案编号不能修改),表3的内容都是全部重新删掉再重新生成?表3能不能只是删掉相关档案编号的行?

3.我想在表3再增加一行,是用来统计序号行内序号的数量,如果序号为空,那它也为空,改怎样写代码?如图:


图片点击可在新窗口打开查看此主题相关图片如下:014.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2013-1-12 10:23:56编辑过]

--  作者:lin_hailun
--  发布时间:2013/1/12 10:57:00
--  
 你做一个按钮吧。

Dim dt_source As DataTable = DataTables("表2")
Dim dt_target As DataTable = DataTables("表3")

dt_target.DataRows.Clear
For Each bh As String In dt_source.GetUniqueValues("", "档案编号")
    Dim drs(3) As DataRow
    drs(0) = dt_target.AddNew
    drs(1) = dt_target.AddNew
    drs(2) = dt_target.AddNew
    drs(3) = dt_target.AddNew
    For Each r As DataRow In drs
        r("档案编号") = bh
    Next
    Dim count As Integer = 1
    Dim xh As New Dictionary(Of String, Integer)
    For Each dr As DataRow In dt_source.Select("档案编号 = \'" & bh & "\'")
        drs(0)("顺序" & count) = dr("颜色")
        drs(2)("顺序" & count) = dr("尺寸")
        drs(3)("顺序" & count) = dr("机型")
        If xh.ContainsKey(dr("颜色")) Then
            drs(1)("顺序" & xh(dr("颜色"))) &= ";" & dr("序号")
        Else
            drs(1)("顺序" & count) = dr("序号")
            xh.Add(dr("颜色"), count)
            count += 1
        End If
    Next

    Dim ndr As DataRow = dt_target.AddNew  
    ndr("档案编号") = bh
    For i As Integer = 1 To 20
        If drs(1)("顺序" & i) > "" Then
            ndr("顺序" & i) = drs(1)("顺序" & i).split(";").Length
        End If
    Next
Next

--  作者:lin_hailun
--  发布时间:2013/1/12 11:02:00
--  
 表事件里的代码

If e.DataCol.Name <> "档案编号" Then
    Dim dt_source As DataTable = e.DataTable
    Dim dt_target As DataTable = DataTables("表3")

    Dim bh As String = e.DataRow("档案编号")   
    dt_target.DeleteFor("档案编号 = \'" & bh & "\'")
    Dim drs(3) As DataRow
    drs(0) = dt_target.AddNew
    drs(1) = dt_target.AddNew
    drs(2) = dt_target.AddNew
    drs(3) = dt_target.AddNew
    For Each r As DataRow In drs
        r("档案编号") = bh
    Next
    Dim count As Integer = 1
    Dim xh As New Dictionary(Of String, Integer)
    For Each dr As DataRow In dt_source.Select("档案编号 = \'" & bh & "\'")
        drs(0)("顺序" & count) = dr("颜色")
        drs(2)("顺序" & count) = dr("尺寸")
        drs(3)("顺序" & count) = dr("机型")
        If xh.ContainsKey(dr("颜色")) Then
            drs(1)("顺序" & xh(dr("颜色"))) &= ";" & dr("序号")
        Else
            drs(1)("顺序" & count) = dr("序号")
            xh.Add(dr("颜色"), count)
            count += 1
        End If
    Next
   
    Dim ndr As DataRow = dt_target.AddNew
    ndr("档案编号") = bh
    For i As Integer = 1 To 20
        If drs(1)("顺序" & i) > "" Then
            ndr("顺序" & i) = drs(1)("顺序" & i).split(";").Length
        End If
    Next
End If

--  作者:zcw728909
--  发布时间:2013/1/12 11:53:00
--  
谢谢了,我再试试
--  作者:zcw728909
--  发布时间:2013/1/12 12:00:00
--  

这个问题是怎么出现的?就是我刚才说的第一点问题,现在还是这种情况


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

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

[此贴子已经被作者于2013-1-12 12:00:46编辑过]