以文本方式查看主题

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

--  作者:liujywwy
--  发布时间:2014/8/13 16:38:00
--  [求助]如果通过其他表列的状态来更改另外一个表行的颜色?

在需求主表,对审核通过打勾,希望在需求明细表的相应的需求编号行颜色更改。

在需求主表,对审核未通过打勾,希望在需求明细表的相应的需求编号行颜色更改。

在临时版本跟踪表,对状态选择Bound or Published or Confirming 。希望在需求明细表的相应的需求编号行颜色做不同更改。

 

我只知道在同一个表,对某行更改颜色,设置自定义样式,表属性---Drawcell写代码。这个会。

但是跨表更改不会。请帮忙。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:临时版本跟踪系统26.rar


--  作者:Bin
--  发布时间:2014/8/13 16:40:00
--  
利用FIND找到对应的行就可以了

但是这么做,效率不高.

--  作者:有点甜
--  发布时间:2014/8/13 16:44:00
--  
 楼主,你可以加入一列,把其他表的值写到本表来,这样你就只需要判断本表的数据。
--  作者:liujywwy
--  发布时间:2014/8/13 17:29:00
--  
以下是引用有点甜在2014-8-13 16:44:00的发言:
 楼主,你可以加入一列,把其他表的值写到本表来,这样你就只需要判断本表的数据。

Dim r As Row = Tables("需求主表").Current

If e.DataCol.name="审核通过" Then
    If e.DataRow("审核通过") Then
        If MessageBox.show("请核实已审核的需求","打勾前请确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)=DialogResult.OK Then           
            Dim m As New MailSender
            m.Host = "mail.bdcom.com.cn"
            m.Account = "version@bdcom.com.cn"
            m.Password = "version"
            m.From = "version@bdcom.com.cn"
            m.To = r("邮件通知")
            If r.IsNull("研发邮箱") = False Then
                m.AddReceiver(r("研发邮箱"))
            End If
            If r.IsNull("附加通知人员") = False Then
                m.AddReceiver(r("附加通知人员"))
            End If
            m.Title = "博达软件管理系统= = = = = = =" & "需求编号:" & r("需求编号") & "-----此需求已审核,请研发和测试尽快处理"
            m.C & r("需求编号") & "      期望交期:"  & r("期望交期")
            m.Send
            msgbox("需求编号:" & r("需求编号") & "------>" & "此需求已审核通过并mail通知了相关研发测试人员!")
            Select Case e.DataCol.Name
                Case "审核通过"
                    Tables("需求主表").Filter = "审核通过 = False And  审核不通过 = False"
            End Select

            If r.DataRow.GetChildRows("需求明细表").Count = 0 Then
                Dim dr As DataRow = DataTables("需求明细表").AddNew()
                dr("状态") = r("审核通过")
            End If

            If r.DataRow.GetChildRows("临时版本跟踪表").Count = 0 Then
                Dim dr As DataRow = DataTables("临时版本跟踪表").AddNew()
                dr("需求编号") = r("需求编号")
            End If
        End If
    End If
End If

这是需求主表datacolchanged代码。

增加的是下面的代码是不是有问题啊。执行完在需求明细表的状态列没有内容。

 If r.DataRow.GetChildRows("需求明细表").Count = 0 Then
                Dim dr As DataRow = DataTables("需求明细表").AddNew()
                dr("状态") = r("审核通过")


--  作者:有点甜
--  发布时间:2014/8/13 17:38:00
--  
For Each cdr As DataRow In r.DataRow.GetChildRows("需求明细表")
    cdr("状态") = r("审核通过")
End If

--  作者:liujywwy
--  发布时间:2014/8/14 9:16:00
--  
以下是引用有点甜在2014-8-13 17:38:00的发言:
For Each cdr As DataRow In r.DataRow.GetChildRows("需求明细表")
    cdr("状态") = r("审核通过")
End If

通过for each遍历,那不就需求明细表所有行的状态列的值都变为了true吗?

应该是只针对需求编号的行改状态。

比如在需求主表,需求编号为20140814,勾选审核通过,然后在需求明细表的需求编号为20140814的行的状态列值变为true。想做为这样效果。


--  作者:Bin
--  发布时间:2014/8/14 9:19:00
--  
不会,你动手试试先
--  作者:liujywwy
--  发布时间:2014/8/14 10:54:00
--  

临时版本跟踪表datacolchange代码如下:

If e.DataCol.name="状态" Then
    If e.DataRow("状态") = "Published" Then
        If r.IsNull("临时版本编号") = True OrElse r.isnull("软件环境") = True OrElse r.isnull("show_version") = True Then
            MessageBox.show("请检查,临时版本编号列,软件环境列,show version列不能为空","提示",MessageBoxButtons.OK,MessageBoxIcon.Question)
            e.DataRow("状态") = ""
        Else
            If MessageBox.show("请确认此需求的状态要变更为已发布?","请确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)=DialogResult.OK Then
                Dim m As New MailSender
                m.Host = "mail.bdcom.com.cn"
                m.Account = "version@bdcom.com.cn"
                m.Password = "version"
                m.From = "version@bdcom.com.cn"
                If r.IsNull("邮件通知") = False Then
                    m.AddReceiver(r("邮件通知"))
                End If
                If r.IsNull("研发邮箱") = False Then
                    m.AddReceiver(r("研发邮箱"))
                End If
                If r.IsNull("技术支持邮箱") = False Then
                    m.AddReceiver(r("技术支持邮箱"))
                End If
                m.Title = "博达软件管理系统= = = = = = =" & "需求编号:" & r("需求编号") &"------>临时版本编号:" & r("临时版本编号") & "+" & r("软件环境") & "已发布"
                m.C & r("需求编号") &"------>临时版本编号:" & r("临时版本编号") & "+" & r("软件环境") & "已发布"
                m.Send
                msgbox("临时版本编号:" & r("临时版本编号") & "+" & r("软件环境") & "已发布并mail通知了相关邮件接收者!")               
                For Each cdr As DataRow In r.DataRow.GetChildRows("需求明细表")
                    cdr("状态") = r("状态")
                Next
                r.locked = True
            Else e.DataRow("状态") = ""
            End If
        End If
    End If
End If

请看一下红色的代码。3个表,需求明细表,需求主表,临时版本跟踪表。

勾选需求主表的审核通过,需求明细表状态列为true,再次对临时版本跟踪表的状态列选择了Published。按照理论需求明细表状态列的值由之前的true应该更改为Published。

可是没生效。请看看需要怎么改。


--  作者:有点甜
--  发布时间:2014/8/14 11:24:00
--  

If e.DataCol.name="状态" Then
    If e.DataRow("状态") = "Published" Then
        If r.IsNull("临时版本编号") = True OrElse r.isnull("软件环境") = True OrElse r.isnull("show_version") = True Then
            MessageBox.show("请检查,临时版本编号列,软件环境列,show version列不能为空","提示",MessageBoxButtons.OK,MessageBoxIcon.Question)
            e.DataRow("状态") = ""
        Else
            If MessageBox.show("请确认此需求的状态要变更为已发布?","请确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)=DialogResult.OK Then
                Dim m As New MailSender
                m.Host = "mail.bdcom.com.cn"
                m.Account = "version@bdcom.com.cn"
                m.Password = "version"
                m.From = "version@bdcom.com.cn"
                If r.IsNull("邮件通知") = False Then
                    m.AddReceiver(r("邮件通知"))
                End If
                If r.IsNull("研发邮箱") = False Then
                    m.AddReceiver(r("研发邮箱"))
                End If
                If r.IsNull("技术支持邮箱") = False Then
                    m.AddReceiver(r("技术支持邮箱"))
                End If
                m.Title = "博达软件管理系统= = = = = = =" & "需求编号:" & r("需求编号") &"------>临时版本编号:" & r("临时版本编号") & "+" & r("软件环境") & "已发布"
                m.C & r("需求编号") &"------>临时版本编号:" & r("临时版本编号") & "+" & r("软件环境") & "已发布"
                m.Send
                msgbox("临时版本编号:" & r("临时版本编号") & "+" & r("软件环境") & "已发布并mail通知了相关邮件接收者!")
               
                r.locked = True
            Else e.DataRow("状态") = ""
            End If
        End If
    End If
    For Each cdr As DataRow In r.DataRow.GetChildRows("需求明细表")
        cdr("状态") = r("状态")
    Next
End If

 


--  作者:liujywwy
--  发布时间:2014/8/14 12:07:00
--  
好像还是不对啊。没生效。