以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  参照帮助中的Edit函数创建了对应的页面 当前可以实现新增基础 删除基础 编辑基础 但是不能实现新增明细 和显示已经具有的明细  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=160492)

--  作者:cnsjroom
--  发布时间:2021/2/4 15:01:00
--  参照帮助中的Edit函数创建了对应的页面 当前可以实现新增基础 删除基础 编辑基础 但是不能实现新增明细 和显示已经具有的明细

参照帮助中的Edit函数创建了对应的页面   当前可以实现新增基础 删除基础  编辑基础  但是不能实现新增明细 和显示已经具有的明细  
经查貌似明细数据没有写入数据库表    麻烦老师帮忙看看下面代码中哪个部分有问题呢  是参照帮助操作的

以下内容是专门发给有点蓝浏览

运行效果

图片点击可在新窗口打开查看此主题相关图片如下:12121.gif
图片点击可在新窗口打开查看


[此贴子已经被作者于2021/2/4 16:54:04编辑过]

--  作者:有点蓝
--  发布时间:2021/2/4 15:07:00
--  
哪段代码是新增明细的?哪段代码又是保存明细的?
--  作者:cnsjroom
--  发布时间:2021/2/4 15:18:00
--  回复:(有点蓝)哪段代码是新增明细的?哪段代码又是...
\'稿件发表明细编辑
Dim mr As DataRow \'要编辑的稿件发表明细
Dim IsNew As Boolean \'此变量用于标记是否要新增明细
If e.GetValues.ContainsKey("uuid") = False OrElse e.GetValues.ContainsKey("addnext") \'如果是新增稿件基础,或这包括addnext参数
    IsNew = True \'将IsNew参数设置为True,表明需要新增稿件发表明细
ElseIf e.GetValues.ContainsKey("uuid") Then \'如果传递了稿件发表明细主键
    mr = DataTables("稿件发表明细").SQLFind("[uuid]=" & e.GetValues("uuid")) \'找出此稿件发表明细进行编辑
End If
If IsNew OrElse mr IsNot Nothing  Then
    With wb.AddInputGroup("form1","ipg2",iif(IsNew,"新增明细","编辑明细"))
        If IsNew Then \'如果是新增稿件发表明细
            .AddInput("发表时间","发表时间","date")
            .AddInput("发表平台","发表平台","text")
            .AddInput("平台类型","平台类型","text")
            .AddInput("平台级别","平台级别","text")
            .AddInput("文章链接","文章链接","text")
        Else
            .AddHiddenValue("DetailID",mr("uuid")) \'插入一个隐藏的稿件发表明细主键,此值将随表单数据一并提交到服务器.
            .AddInput("发表时间","发表时间","date").Value = mr("发表时间")
            .AddInput("发表平台","发表平台","text").value = mr("发表平台")
            .AddInput("平台类型","平台类型","text").Value = mr("平台类型")
            .AddInput("平台级别","平台级别","text").Value = mr("平台级别")
            .AddInput("文章链接","文章链接","text").Value = mr("文章链接")
        End If
    End With
End If
\'生成稿件发表明细表格
If e.GetValues.ContainsKey("uuid") AndAlso  srs.count > 0 Then \'如果不是新增稿件基础,且稿件发表明细行数大于0,则生成稿件发表明细表格.
    With wb.AddTable("form1","detailTable") \'为了区分,明细表的名字设为detailTable
        .head.AddRow("发表时间","发表平台","平台级别","文章链接")
        .ColWidth="1px,2px,8px,90px"
        For Each sr As DataRow In srs
            With .body.AddRow()
                .Primarykey =sr("uuid")
                Dim s As String=sr("发表平台")
                Dim s1 As String = sr("平台级别")
                Dim s11 As String = sr("文章链接")
                If s11.Length > 10 Then
                    s11 = s11.SubString(0,25) & "..."
                End If
                .AddCells(sr("发表时间"),s,s1,s11)\'逐个单元格增加
            End With
        Next
    End With
    \'设计菜单
    With wb.AddActionSheet("","menu")
        .Add("mnudAdd", "增加明细").Attribute="" \'调用js函数
        .Add("mnuEdit", "编辑明细").Attribute =""
        .Add("mnuDelete", "删除明细").Attribute ="""
        .Add("mnuCancel","取消","",True)
    End With
End If



老师   按照帮助例子中mr定义的是明细表变量  在帮助代码中也没有看见类似pr.save保存代码  如果要写mr.save应该放在哪个位置呢?
因为明细表没有数据  所以明细表格的内容也没有显示出来

--  作者:有点蓝
--  发布时间:2021/2/4 15:26:00
--  
上面这种代码是在界面新增明细的编辑控件,而不是编辑保存到数据库

http://www.foxtable.com/mobilehelp/topics/0125.htm
http://www.foxtable.com/mobilehelp/topics/0134.htm

--  作者:cnsjroom
--  发布时间:2021/2/4 16:54:00
--  回复:(有点蓝)上面这种代码是在界面新增明细的编辑...


图片点击可在新窗口打开查看此主题相关图片如下:12121.gif
图片点击可在新窗口打开查看


Dim e As RequestEventArgs = args(0)
\'保存稿件基础
Dim dr As DataRow = DataTables("稿件基础").SQLFind("uuid=\'" & e.PostValues("uuid") & "\'")
Dim nms() As String = {"uuid","文章类别","文章属性","文章标题","文章作者","文章作者1","文章作者2","文章作者3","文章作者4","文章作者5","文章内容","文章时间","登记时间","登记单位"}  \'""
If dr IsNot Nothing Then
    For Each nm As String In nms
        If e.PostValues.ContainsKey(nm) Then
            dr(nm)= e.PostValues(nm)
        End If
    Next
End If
dr.Save()
\'保存明细
Dim valid As Boolean \'用于判断用户是否 输入了稿件发表明细数据
nms = New String() {"uuid","文章标题","发表时间","发表平台","平台类型","平台级别","文章链接","编辑人","备注"}
For Each nm As String In nms
    If e.PostValues.ContainsKey(nm) Then
        valid = True \'如果 输入了稿件发表明细数据,将valid变量设置为True
    End If
Next
If valid Then \'如果提交了稿件发表明细数据
    Dim sr As DataRow
    If e.PostValues.ContainsKey("DetailID") Then \'如果传递了稿件发表明细主键
        sr = DataTables("稿件发表明细").SQLFind("[uuid]=" & e.PostValues("DetailID"))
        If sr Is Nothing  Then  \'多用户环境,必须考虑其他用户删除此明细的可能,避免程序报错
            Return ""
        End If
    Else
        sr = DataTables("稿件发表明细").SQLAddNew() \'增加一个稿件发表明细
        sr("uuid") = dr("uuid")
    End If
    For Each nm As String  In nms
        sr(nm) = e.PostValues(nm)
    Next
    sr.Save()  \'必须保存,而且必须在最后保存,因为用SQLAddNew增加的行,一旦保存,就不能再引用此行
End If


.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:自定义函数,Save
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。
[此贴子已经被作者于2021/2/4 17:04:08编辑过]

--  作者:有点蓝
--  发布时间:2021/2/4 17:23:00
--  
调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm