以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  垂直表转换问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=86437)

--  作者:douglas738888
--  发布时间:2016/6/17 12:10:00
--  垂直表转换问题
请教老师,以下代码能执行转换了,但是要转换的是根据主表关联的子表行,不知道怎么设定了

Dim dtb As New DataTableBuilder("表AA")
dtb.AddDef("日期", Gettype(String),100)
dtb.AddDef("星期", Gettype(String),100)
dtb.AddDef("工作类别", Gettype(String),500)
dtb.AddDef("工作内容", Gettype(String),500)
dtb.AddDef("任务接受时间", Gettype(String),100)
dtb.AddDef("计划完成时间", Gettype(String),100)
dtb.AddDef("实际完成时间", Gettype(String),100)
dtb.AddDef("质量自评(0-10)", Gettype(String),100)
dtb.AddDef("效率自评(0-10)", Gettype(String),100)
dtb.AddDef("备注", Gettype(String),500)
dtb.AddDef("员工编号", Gettype(String),100)
dtb.AddDef("员工姓名", Gettype(String),100)
dtb.AddDef("索引号", Gettype(String),100)
\'dtb.AddDef("分数", Gettype(Double))
dtb.Build()
Dim kms() As String = {"图纸设计明细","方案和说明书","概算/预算/结算","技术协议签订","投标文件制作","设计技术交底","设计资料存档","电子资料存档","出差天数","加班天数","杂项工作"}
Dim r As Row = Tables("工作日志主表.工作日志副表1").Current
For Each dr1 As DataRow In r   \'DataTables("工作日志主表.工作日志副表1").DataRows
    For Each km As String In kms
        Dim dr2 As DataRow = DataTables("表AA").AddNew()
        dr2("日期") = dr1("日期")
        dr2("星期") = dr1("星期")
        dr2("任务接受时间") = dr1("任务接受时间")
        dr2("计划完成时间") = dr1("计划完成时间")
        dr2("实际完成时间") = dr1("实际完成时间")
        dr2("质量自评(0-10)") = dr1("质量自评(0-10)")
        dr2("效率自评(0-10)") = dr1("效率自评(0-10)")
        dr2("备注") = dr1("备注")
        dr2("员工编号") = dr1("员工编号")
        dr2("员工姓名") = dr1("员工姓名")
        dr2("索引号") = dr1("索引号")
        dr2("工作类别") = km
        dr2("工作内容") = dr1(km)
    Next
Next
MainTable = Tables("表AA")
[此贴子已经被作者于2016/6/17 12:10:22编辑过]

--  作者:大红袍
--  发布时间:2016/6/17 12:12:00
--  

这个意思?

 

Dim dtb As New DataTableBuilder("表AA")
dtb.AddDef("日期", Gettype(String),100)
dtb.AddDef("星期", Gettype(String),100)
dtb.AddDef("工作类别", Gettype(String),500)
dtb.AddDef("工作内容", Gettype(String),500)
dtb.AddDef("任务接受时间", Gettype(String),100)
dtb.AddDef("计划完成时间", Gettype(String),100)
dtb.AddDef("实际完成时间", Gettype(String),100)
dtb.AddDef("质量自评(0-10)", Gettype(String),100)
dtb.AddDef("效率自评(0-10)", Gettype(String),100)
dtb.AddDef("备注", Gettype(String),500)
dtb.AddDef("员工编号", Gettype(String),100)
dtb.AddDef("员工姓名", Gettype(String),100)
dtb.AddDef("索引号", Gettype(String),100)
\'dtb.AddDef("分数", Gettype(Double))
dtb.Build()
Dim kms() As String = {"图纸设计明细","方案和说明书","概算/预算/结算","技术协议签订","投标文件制作","设计技术交底","设计资料存档","电子资料存档","出差天数","加班天数","杂项工作"}
For Each dr1 As Row In Tables("工作日志主表.工作日志副表1").Rows
    For Each km As String In kms
        Dim dr2 As DataRow = DataTables("表AA").AddNew()
        dr2("日期") = dr1("日期")
        dr2("星期") = dr1("星期")
        dr2("任务接受时间") = dr1("任务接受时间")
        dr2("计划完成时间") = dr1("计划完成时间")
        dr2("实际完成时间") = dr1("实际完成时间")
        dr2("质量自评(0-10)") = dr1("质量自评(0-10)")
        dr2("效率自评(0-10)") = dr1("效率自评(0-10)")
        dr2("备注") = dr1("备注")
        dr2("员工编号") = dr1("员工编号")
        dr2("员工姓名") = dr1("员工姓名")
        dr2("索引号") = dr1("索引号")
        dr2("工作类别") = km
        dr2("工作内容") = dr1(km)
    Next
Next
MainTable = Tables("表AA")


--  作者:douglas738888
--  发布时间:2016/6/17 12:21:00
--  
是的是的,我原来也设了Rows,但是没有弄清楚DataTables("工作日志副表1").DataRows 和Tables("工作日志主表.工作日志副表1").Rows的概念了


--  作者:douglas738888
--  发布时间:2016/6/17 14:04:00
--  
另外,再请教老师,这个是窗口按钮的代码,把  临时表AA  的内容在正式表  工作日志副表2  中添加内容,这个功能已经能实现了

问题是:在  工作日志副表2  的DataColChanged 中写了自动编号的代码,不能生成索引编号,只有修改日期列内容才能生成索引编号,非关联的  工作日志月报副

表 也才自动增加行,好像是从 临时表AA 增加到  工作日志副表2 的内容,系统不认为是增加行 

再请老师帮忙看看这个例子,谢谢!

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



--  作者:大红袍
--  发布时间:2016/6/17 14:17:00
--  

把首尾的代码去掉

 

\'SystemReady = False
For Each  d As DataRow In DataTables("表AA").DataRows
    Dim dr As DataRow = DataTables("工作日志副表2").AddNew
    dr("日期")=d("日期")
    dr("星期")=d("星期")
    dr("工作类别")=d("工作类别")
    dr("工作内容")=d("工作内容")
    dr("任务接受时间")=d("任务接受时间")
    dr("计划完成时间")=d("计划完成时间")
    dr("实际完成时间")=d("实际完成时间")
    dr("质量自评(0-10)")=d("质量自评(0-10)")
    dr("效率自评(0-10)")=d("效率自评(0-10)")
    dr("备注")=d("备注")
    dr("员工编号")=d("员工编号")
    dr("员工姓名")=d("员工姓名")
    dr("索引号")=d("索引号")
Next
\'DataTables("工作日志副表2").Save
DataTables("表AA").DeleteFor("")
\'SystemReady = True


--  作者:大红袍
--  发布时间:2016/6/17 14:18:00
--  

或者是这样

 

SystemReady = False
For Each  d As DataRow In DataTables("表AA").DataRows
    Dim dr As DataRow = DataTables("工作日志副表2").AddNew

SystemReady = True
    dr("日期")=d("日期")

SystemReady = False
    dr("星期")=d("星期")
    dr("工作类别")=d("工作类别")
    dr("工作内容")=d("工作内容")
    dr("任务接受时间")=d("任务接受时间")
    dr("计划完成时间")=d("计划完成时间")
    dr("实际完成时间")=d("实际完成时间")
    dr("质量自评(0-10)")=d("质量自评(0-10)")
    dr("效率自评(0-10)")=d("效率自评(0-10)")
    dr("备注")=d("备注")
    dr("员工编号")=d("员工编号")
    dr("员工姓名")=d("员工姓名")
    dr("索引号")=d("索引号")
Next
\'DataTables("工作日志副表2").Save
DataTables("表AA").DeleteFor("")
SystemReady = True


--  作者:douglas738888
--  发布时间:2016/6/17 16:35:00
--  
老师,还有个问题,用以下代码在工作日志副表2的DataColChanged 写入,工作日志副表2  增加行后,部分数据不能同步到 工作日志月报副表

只有日期、月报索引 能同步数据,其他列为空白不能同步数据 

Select Case e.DataCol.name
    Case "月报索引"
        Dim dr As DataRow = DataTables("工作日志月报副表").Find("月报索引 = \'" & e.OldValue & "\'")
        If dr Is Nothing Then 
            dr = DataTables("工作日志月报副表").AddNew()
            dr("月报索引") = e.DataRow("月报索引")
            dr("日期") = e.DataRow("日期")
            dr("员工编号") = e.DataRow("员工编号")
            dr("员工姓名") = e.DataRow("员工姓名")
            dr("工作类别") = e.DataRow("工作类别")
            dr("工作内容") = e.DataRow("工作内容")
        Else
            dr("月报索引") = e.DataRow("月报索引")
        End If
    Case "日期","员工编号","员工姓名","工作类别","工作内容"
        Dim dr As DataRow = DataTables("工作日志月报副表").Find("月报索引 = \'" & e.DataRow("月报索引") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select

--  作者:douglas738888
--  发布时间:2016/6/17 16:39:00
--  
经过几次测试,老师指导的第一种方式可行,         第二种方式,不能有效同步数据。
--  作者:大红袍
--  发布时间:2016/6/17 17:39:00
--  
以下是引用douglas738888在2016/6/17 16:39:00的发言:
经过几次测试,老师指导的第一种方式可行,         第二种方式,不能有效同步数据。

 

不同同步数据是正常的,因为不触发datacolchanged事件了。

 

看看 http://www.foxtable.com/help/topics/2218.htm