以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  无法保存行  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190778)

--  作者:dahai
--  发布时间:2024/3/2 21:20:00
--  无法保存行
我用的是阿里云sql数据库,在datacolchanged代码如下

If e.DataCol.Name = "创建日期" Then
    If e.DataRow.IsNull("创建日期") Then
        e.DataRow("退货单编号") = Nothing
    Else
        Dim d As Date = e.DataRow("创建日期")
        Dim y As Integer = d.Year
        Dim m As Integer = d.Month
        Dim Days As Integer = Date.DaysInMonth(y, m)
        Dim fd As Date = New Date(y, m, 1) 
        Dim ld As Date = New Date(y, m, Days
        Dim bh As String = "TC" & Format(d, "yyyyMM") 
        If e.DataRow("退货单编号").StartsWith(bh) = False Then
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.SQLCompute("Max(退货单编号)", "创建日期 >= \'" & fd & "\' And 创建日期 <= \'" & ld & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号
            If max > "" Then 
                idx = CInt(max.Substring(8, 4)) + 1 
            Else
                idx = 1 
            End If
            e.DataRow("退货单编号") = bh & Format(idx, "0000")
        End If
    End If
    e.DataRow.save()
End If

新增行后,并不会自动保存,我不清楚问题出在哪里,请专家帮忙看一下问题出在哪,谢谢!


--  作者:有点蓝
--  发布时间:2024/3/3 20:08:00
--  
新增行后,输入"创建日期"才会保存的
--  作者:dahai
--  发布时间:2024/3/4 10:37:00
--  回复:(有点蓝)新增行后,输入"创建日期"才会保存的...
datarowadding 设置了 e.datarow("创建日期") = date.today 并且也自动生成了编号,程序上e.datarow.save()是在datarowadding和datacolchanged之后的。所以我觉得应该可以自动保存才对。
--  作者:有点蓝
--  发布时间:2024/3/4 11:05:00
--  
datarowadding 事件改为放到datarowadded事件
--  作者:dahai
--  发布时间:2024/3/4 13:55:00
--  回复:(有点蓝)datarowadding 事件改为放到dat...
谢谢版主,问题解决了。看了帮助文件datarowadding 和 datarowadded的区别,我还是不太理解,帮助文件中,自动生成编号的例子,为什么不在 datarowadded中自动生成日期,而使用datarowadding
--  作者:有点蓝
--  发布时间:2024/3/4 14:09:00
--  
帮助不需要触发事件。datarowadding的时候,行还没有添加到表格,不会触发datacolchanged事件