Foxtable(狐表)用户栏目专家坐堂 → 垂直表转换问题


  共有1837人关注过本帖树形打印复制链接

主题:垂直表转换问题

帅哥哟,离线,有人找我吗?
douglas738888
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
垂直表转换问题  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2016/6/17 12:21:00 [只看该作者]

是的是的,我原来也设了Rows,但是没有弄清楚DataTables("工作日志副表1").DataRows 和Tables("工作日志主表.工作日志副表1").Rows的概念了


 回到顶部
帅哥哟,离线,有人找我吗?
douglas738888
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2016/6/17 14:04:00 [只看该作者]

另外,再请教老师,这个是窗口按钮的代码,把  临时表AA  的内容在正式表  工作日志副表2  中添加内容,这个功能已经能实现了

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

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

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

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



 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2016/6/17 16:39:00 [只看该作者]

经过几次测试,老师指导的第一种方式可行,         第二种方式,不能有效同步数据。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/17 17:39:00 [只看该作者]

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

 

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

 

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

 


 回到顶部