以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 代码中数据变化导致触发范围超出问题! (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=160634) |
||||
-- 作者:aoyanghongwei -- 发布时间:2021/2/9 9:53:00 -- 代码中数据变化导致触发范围超出问题! 此主题相关图片如下:001.jpg 做了一个功能,如上图所示,即下表中的字符会随上表中的“当前状态”变化而变化,变化功能现在有了,但问题是: 在“设备名称”相同的情况下,更改一个,则下表中整个月份天数中都被触发变化,超出了变化行中的“开始日期”和“结束日期”的范围;即,不应该变化的也变了; 具体代码如下: Dim zt As String Select Case e.DataRow("当前状态") Case "已完成" zt="F" Case "进行中" zt= "P" Case "延期" zt="D" End Select Select Case e.DataCol.Name Case "计划开始日期","计划完成日期","当前状态" Dim filter As String = "设备名称=\'" & e.DataRow("设备名称") & "\'" DataTables("试验室设备运行情况").DeleteFor(filter) Dim dr2 As DataRow For Each dr As DataRow In e.DataTable.Select(filter) If dr.IsNull("计划开始日期")= False AndAlso dr.IsNull("计划完成日期") = False Dim d As Date = dr("计划开始日期") Dim m As Integer = d.month dr2 = DataTables("试验室设备运行情况").Find(filter & " and 月份=\'" & m & "\' and 年份=" & d.Year) If dr2 Is Nothing Then dr2 = DataTables("试验室设备运行情况").AddNew() dr2("设备名称") = e.DataRow("设备名称") dr2("年份") = d.year dr2("月份") = m End If Dim d1 As Date = dr("计划完成日期") Do While d <= d1 If d.Month <> m Then m = d.Month dr2 = DataTables("试验室设备运行情况").Find(filter & " and 月份=\'" & m & "\' and 年份=" & d.Year) If dr2 Is Nothing Then dr2 = DataTables("试验室设备运行情况").AddNew() dr2("设备名称") = e.DataRow("设备名称") dr2("年份") = d.year dr2("月份") = m End If End If dr2("设备运行情况_" & d.Day) = zt d = d.AddDays(1) Loop Else Dim d As Date If dr.IsNull("计划开始日期") d = dr("计划完成日期") Else d = dr("计划开始日期") End If If d <> Nothing Dim m As Integer = d.month dr2 = DataTables("试验室设备运行情况").Find(filter & " and 月份=\'" & m & "\' and 年份=" & d.Year) If dr2 Is Nothing Then dr2 = DataTables("试验室设备运行情况").AddNew() dr2("设备名称") = e.DataRow("设备名称") dr2("年份") = d.year dr2("月份") = m End If dr2("设备运行情况_" & d.Day) = zt End If End If Next End Select Select Case e.DataCol.name Case "计划完成日期","是否完成","当前状态" If e.DataRow("是否完成") = False AndAlso e.DataRow("计划完成日期") < Date.Today Then e.DataRow("当前状态") = "延期" ElseIf e.DataRow("是否完成") = False AndAlso e.DataRow("计划完成日期") > Date.Today AndAlso e.DataRow("计划开始日期") < Date.Today Then e.DataRow("当前状态") = "进行中" ElseIf e.DataRow("是否完成") = True Then e.DataRow("当前状态") = "已完成" Else e.DataRow("当前状态") = "准备中" End If End Select 烦请大神帮忙看一下,毛病在哪里,谢谢! |
||||
-- 作者:有点蓝 -- 发布时间:2021/2/9 9:59:00 -- Select Case e.DataCol.Name Case "计划开始日期","计划完成日期","当前状态" Dim filter As String = "设备名称=\'" & e.DataRow("设备名称") & "\'" DataTables("试验室设备运行情况").DeleteFor(filter) Dim dr2 As DataRow For Each dr As DataRow In e.DataTable.Select(filter) If dr.IsNull("计划开始日期")= False AndAlso dr.IsNull("计划完成日期") = False Dim zt As String Select Case dr ("当前状态") Case "已完成" zt="F" Case "进行中" zt= "P" Case "延期" zt="D" End Select Dim d As Date = dr("计划开始日期") Dim m As Integer = d.month
|
||||
-- 作者:aoyanghongwei -- 发布时间:2021/2/9 11:18:00 --
好像还是不行,如果上表一行的状态发生改变,下表会整体变化。我把文件上传了,能帮我试一下看吗?
|
||||
-- 作者:有点蓝 -- 发布时间:2021/2/9 11:32:00 -- Select Case dr ("当前状态") Case "已完成" zt="F" |