以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]WEUI明细表编辑以后如何保存  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=195624)

--  作者:chnfo
--  发布时间:2025/2/23 21:55:00
--  [求助]WEUI明细表编辑以后如何保存
定义Edit.htm,大意是将打开订单表的明细(不过不是用表,是用AddPreview加载明细,然后点各个明细的编辑按钮,需要编辑哪个明细,就点哪个明细的编辑按钮
Dim wb As New weui
Dim pr As DataRow \'定义主表ID
Dim drs As List(Of DataRow) = DataTables("订单2").SQLSe1ect("", 5, "[_Identify] ") \'获取前5条记录  

For Each dr As DataRow In drs
    With wb.AddPreview("", dr("ID"), dr("产品"), dr("金额"))
        .AddItem("客户", dr("客户"))
        .AddItem("雇员", dr("雇员"))
        .AddItem("单价", dr("单价"))
        .AddItem("数量", dr("数量"))
        .AddItem("折扣", dr("折扣"))
        .AddItem("日期", dr("日期"))
        .Addbutton("编辑", "EditDetail.htm?page = " & Page & " & did = " & dr("ID") & " & oid = " & pr("ID"), 1, "") 
    End With 
Next
e.WriteString(wb.Build)


有个问题,明细表的数据修改以后,如何保存?
这里定义一个明细表的编辑函数editdetail.
Dim e As RequestEventArgs = args(0)
Dim wb As New weui

Dim Page As Integer \'页码变量
If e.GetValues.ContainsKey("page") Then \'如果地址中有page参数
    Integer.TryParse(e.GetValues("page"), page) \'提取page参数
End If

Dim oid As String
If e.GetValues.ContainsKey("oid") Then \'如果地址中有主表ID参数
    oid = e.GetValues("oid") \'提取主表ID参数
End If

Dim xr As DataRow
If e.GetValues.ContainsKey("did") Then \'如果地址中有明细ID参数
    xr = DataTables("明细表").SQLFind("ID = \'" & e.GetValues("did") & "\'")
    Dim url As String = "EditDetail.htm?page=" & page & "&did=\'" & xr("ID") & "\'" & "&oid=\'" & oid & "\'" \'传递页码和明细ID
    wb.AddForm("", "form1", url)
    With wb.AddInputGroup("form1", "ipg1", "编辑明细")
        .AddHiddenValue("did", xr("ID"))
        .AddInput("Code", "编号", "text").Value = xr("Code")
        .AddInput("Title", "名称", "text").Value = xr("Title")
    End With
    
    With wb.AddButtonGroup("form1", "btg1", False)
        .Add("btnok", "确定", "submit", )  \'这个保存应当怎么写?
        .Add("btnBack", "返回", "", "Edit.htm?page=" & Page & "&oid=" & oid)  \'点击返回,就回到上一个界面
    End With
End IfIf e.PostValues.Count > 0 Then \'如果是通过提交按钮访问,则给一个已经保存的提示给用户,时长500毫秒
wb.AddToast("", "t1", "已经保存", 0).Msec = 500
End If
wb.AppendHTML("<script src=\'./lib/order.js\'></script>") \'引入脚本文件
e.WriteString(wb.Build) \'生成网页

--  作者:有点蓝
--  发布时间:2025/2/23 22:25:00
--  
确定按钮使用的是submit,会正常提交,只需要判断e.PostValues.Count > 0


If e.PostValues.Count = 0 Then
显示编辑区
else
保存的代码
end if

--  作者:chnfo
--  发布时间:2025/2/23 23:43:00
--  
editdetail函数定义如下:
Dim e As RequestEventArgs = args(0)
Dim wb As New weui

Dim Page As Integer \'页码变量
Dim oid As String
Dim xr As DataRow

If e.GetValues.ContainsKey("page") AndAlso e.GetValues.ContainsKey("oid") AndAlso e.GetValues.ContainsKey("did") Then 
    Integer.TryParse(e.GetValues("page"), page) \'提取page参数
    oid = e.GetValues("oid") \'提取主表ID参数
    xr = DataTables("TbBProD").SQLFind("ID = \'" & e.GetValues("did") & "\'")
    If xr Is Nothing Then
        Return ""
    End If
End If

Dim url As String = "EditBProDetail.htm?page=" & page & "&did=" & xr("ID") & "&oid=" & oid \'传递页码和明细ID

wb.AddForm("", "form1", url)
With wb.AddInputGroup("form1", "ipg1", "编辑明细")
    .AddHiddenValue("did", xr("ID"))
    .AddInput("Code", "编号", "text").Value = xr("Code")
    .AddInput("Title", "名称", "text").Value = xr("Title")
End With

With wb.AddButtonGroup("form1", "btg1", False)
    .Add("btnok", "确定", "submit", url)  \'\'这一句是不是有什么问题?
    .Add("btnBack", "取消", "", "Edit.htm?page=" & Page & "&oid=" & oid)
End With

If e.PostValues.Count > 0 Then 
    xr("Code") = e.PostValues("Code")
    xr("Title") = e.PostValues("Title")
    xr.Save() 
    wb.AddToast("", "t1", "已经保存", 0).Msec = 500
End If

wb.AppendHTML("<script src=\'./lib/order.js\'></script>") \'引入脚本文件
e.WriteString(wb.Build) \'生成网页


但是实际点击“确定”按钮,并没有保存为新输入的值。
名称后面加了“XX”,然后点确定,数据又回去了
ACCESS数据库有延迟?

图片点击可在新窗口打开查看此主题相关图片如下:无标题2.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2025/2/23 23:52:20编辑过]

--  作者:有点蓝
--  发布时间:2025/2/24 8:43:00
--  
Dim url As String = "EditBProDetail.htm?page=" & page & "&did=" & xr("ID") & "&oid=" & oid \'传递页码和明细ID

If e.PostValues.Count > 0 Then 
    xr("Code") = e.PostValues("Code")
    xr("Title") = e.PostValues("Title")
    xr.Save() 
    wb.AddToast("", "t1", "已经保存", 0).Msec = 500
End If

wb.AddForm("", "form1", url)
With wb.AddInputGroup("form1", "ipg1", "编辑明细")
    .AddHiddenValue("did", xr("ID"))
    .AddInput("Code", "编号", "text").Value = xr("Code")
    .AddInput("Title", "名称", "text").Value = xr("Title")
End With

With wb.AddButtonGroup("form1", "btg1", False)
    .Add("btnok", "确定", "submit")
    .Add("btnBack", "取消", "", "Edit.htm?page=" & Page & "&oid=" & oid)
End With

wb.AppendHTML("<script src=\'./lib/order.js\'></script>") \'引入脚本文件
e.WriteString(wb.Build) \'生成网页


--  作者:chnfo
--  发布时间:2025/2/24 9:18:00
--  
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2025.1.3.1
错误所在事件:自定义函数,EditBProDetail
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。

console报错信息如下:
EditBProDetail.htm:1 
            
            
           POST http://127.0.0.1:32177/EditBProDetail.htm?page=0&did=4b02bb18-f0f7-407c-9ad0-52c4c51b53d6&oid=fd61f691-ac73-4e11-b9a8-1f7e1e9be858 404 (foxtable web server has started(error 404))
[此贴子已经被作者于2025/2/24 9:20:41编辑过]

--  作者:chnfo
--  发布时间:2025/2/24 9:53:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:明细展示.png
图片点击可在新窗口打开查看
图片点击可在新窗口打开查看此主题相关图片如下:展示某一订单的明细.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2025/2/24 10:18:00
--  
调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错
--  作者:chnfo
--  发布时间:2025/2/24 17:26:00
--  
Case "EditBProDetail.htm"
        \'        Functions.Execute("EditBProDetail", e)
        Dim wb As New weui
        
        Dim Page As Integer \'页码变量
        Dim oid As String
        Dim xr As DataRow
        
        If e.GetValues.ContainsKey("page") AndAlso e.GetValues.ContainsKey("oid") AndAlso e.GetValues.ContainsKey("did") Then 
            Integer.TryParse(e.GetValues("page"), page) \'提取page参数
            oid = e.GetValues("oid") \'提取主表ID参数
            xr = DataTables("TbBProD").SQLFind("ID = \'" & e.GetValues("did") & "\'") \'获取明细行
            If xr Is Nothing Then
                Return 
            End If
        End If
        
        Dim url As String = "EditBProDetail.htm?page=" & page & "&did=" & xr("ID") & "&oid=" & oid \'传递页码和明细ID
        
        If e.PostValues.Count > 0 Then 
            \'            xr("Code") = e.PostValues("Code")
            \'            xr("Title") = e.PostValues("Title")
            \'            xr.Save() 
            \'            wb.AddToast("", "t1", "已经保存", 0).Msec = 500
            
            Dim sb As New StringBuilder
            sb.AppendLine("<meta name=\'viewport\' c>")
            sb.AppendLine("接收到的数据有:<br/><br/>")
            For Each key As String In e.PostValues.Keys
                sb.AppendLine(key & ":" & e.PostValues(key) & "<br/>")
            Next
            e.WriteString(wb.ToString)  -----这一段的运行结果并未显示,直接弹出了报错窗口
        Else 
            wb.AddForm("", "form1", url)
            With wb.AddInputGroup("form1", "ipg1", "编辑明细")
                .AddHiddenValue("did", xr("ID"))
                .AddInput("Code", "编号", "text").Value = xr("Code")
                .AddInput("Title", "名称", "text").Value = xr("Title")
            End With
            
            With wb.AddButtonGroup("form1", "btg1", False)
                .Add("btnok", "确定", "submit")   ----点确定按钮,就会直接弹报错窗口
                .Add("btnBack", "取消", "", "Edit.htm?page=" & Page & "&oid=" & oid)  \'这个执行结果是正常的
            End With
            
            wb.AppendHTML("<script src=\'./lib/order.js\'></script>") \'引入脚本文件
            e.WriteString(wb.Build) \'生成网页
        End If
图片点击可在新窗口打开查看此主题相关图片如下:点击确定报错.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2025/2/24 17:28:25编辑过]

--  作者:有点蓝
--  发布时间:2025/2/24 17:39:00
--  
e.WriteString(sb.ToString) 
--  作者:chnfo
--  发布时间:2025/2/24 17:48:00
--  
e.WriteString(sb.ToString) ---影响不是在这里
改了以后,仍然直接弹窗报错