以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何实现页数变化后,开始页码默认从1开始,计算出开始页码与结束页码。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189154)

--  作者:cnsjroom
--  发布时间:2023/11/14 12:52:00
--  如何实现页数变化后,开始页码默认从1开始,计算出开始页码与结束页码。
有一材料表(数据参考如下:)
类别   名称    页数   开始页码  结束页码
A        A1          2            1          2
A        A2         3             3          5
A        A3         4             6         9
B        B1          5            1          5
如何实现页数变化后,开始页码默认从1开始,计算出开始页码与结束页码。
谢谢!

代码如何修正呢?以类别为主线,根据不同的类别生成不不同类别对应的开始页码与结束页码,
Dim cmd As New SQ LCommand
cmd.Conn ecti
Dim dt As DataTable
cmd.Com man dText = "SELE CT * From {目录表}"
dt = cmd.ExecuteReader()
Dim dr As DataRow
Dim drs As List(Of DataRow)
dr = dt.Find("类别 =‘“&values(“类别”)&”’ and [_SortKey] < " & e.DataRow("_SortKey"), "[SortKey] Desc") \'找出上一行
If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行
    dr("开始页码") = 1
    dr = e.DataRow
Else
    dr("开始页码") = dr("结束页码") + 1
End If
drs = dt.S elect("类别 =‘“&values(“类别”)&”’ and [_SortKey] >= " & dr("_SortKey"), "[SortKey]")
For i As Integer = 1 To drs.Count - 1 \'
    drs(i)("开始页码") = drs(i - 1)("结束页码") + 1
Next

If e.DataRow.IsNull("开始页码") Then
    dr("结束页码") = Nothing
Else
    dr("结束页码") = dr("开始页码") + dr("结束页码") - 1
End If
dt.Save()
[此贴子已经被作者于2023/11/14 13:08:40编辑过]

--  作者:有点蓝
--  发布时间:2023/11/14 13:43:00
--  
If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行
    dr = e.DataRow
    dr("开始页码") = 1
Else
    dr("开始页码") = dr("结束页码") + 1
End If

--  作者:cnsjroom
--  发布时间:2023/11/14 15:32:00
--  回复:(有点蓝)If dr Is Nothing Then '如果没有找到...
老师 红色部分会报错   这个有没有办法直接弄成狐表内部函数呢?
比如函数名yemajisuan  下面的代码要怎么修改使它能够直接在函数里面就更新完毕呢?默认以类别为分组,根据输入的页数直接计算出开始和结束页码
Dim cmd As New SQLCommand
cmd.Co nne ctio nN ame = "主数据源"
Dim dt As DataTable
cmd.Comma ndText = "S ELE CT * From {目录表}"
dt = cmd.ExecuteReader()
Dim dr As DataRow
Dim drs As List(Of DataRow)
dr = dt.Find("类别 =\'" & values("类别") & "\' and [_SortKey] < " & e.DataRow("_SortKey"), "[SortKey] Desc") \'找出上一行
If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行
    dr = e.DataRow
    dr("开始页码") = 1
Else
    dr("开始页码") = dr("结束页码") + 1
End If
drs = dt.Sel ect("类别 =\'" & values("类别") & "\' and [_SortKey] >= " & dr("_SortKey"), "[SortKey]")
For i As Integer = 1 To drs.Count - 1 \'
    drs(i)("开始页码") = drs(i - 1)("结束页码") + 1
Next

If e.DataRow.IsNull("开始页码") Then
    dr("结束页码") = Nothing
Else
    dr("结束页码") = dr("开始页码") + dr("结束页码") - 1
End If
dt.Save()

--  作者:有点蓝
--  发布时间:2023/11/14 15:37:00
--  
先看看:http://www.foxtable.com/webhelp/topics/0604.htm

代码放在哪里的?如果不是表事件,是不会有e.DataRow这种东西的

--  作者:cnsjroom
--  发布时间:2023/11/14 18:03:00
--  回复:(有点蓝)先看看:http://www.foxtable.com/we...
老师 是放在内部函数里面的  怎么修正呢?没有达到预期    是想直接在内部函数就定义好
然后通过直接调用函数Functions.Execute("mukuyema")就自动计算,仅传参类别值进来。

图片点击可在新窗口打开查看此主题相关图片如下:屏幕截图 2023-11-14 175829.png
图片点击可在新窗口打开查看

Dim dr As DataRow = Args(0)
Dim e As RequestEventArgs = Args(1)

Dim cmd As New SQLCommand
cmd.Conn ection Name = "主数据源"
Dim dt As DataTable
cmd.CommandText = "SE LE  CT * From {目录表}"
dt = cmd.ExecuteReader() 

Dim drs As List(Of DataRow)
dr = dt.Find("类别 =\'" & e.values("类别") & "\' and [_SortKey] < " & dr("_SortKey"), "[SortKey] Desc") \'找出上一行
If dr Is Nothing Then \'如果没有找到上一行,说明本行就是第一行
    dr = dr
    dr("开始页码") = 1
Else
    dr("开始页码") = dr("结束页码") + 1
End If
drs = dt.S el ect("类别 =\'" & e.values("类别") & "\' and [_SortKey] >= " & dr("_SortKey"), "[SortKey]")
For i As Integer = 1 To drs.Count - 1 \'
    drs(i)("开始页码") = drs(i - 1)("结束页码") + 1
Next

If dr.IsNull("开始页码") Then
    dr("结束页码") = Nothing
Else
    dr("结束页码") = dr("开始页码") + dr("结束页码") - 1
End If
dt.Save()

--  作者:有点蓝
--  发布时间:2023/11/14 20:13:00
--  
在什么事件调用这个函数的?
--  作者:cnsjroom
--  发布时间:2023/11/15 10:26:00
--  回复:(有点蓝)在什么事件调用这个函数的?
想在按钮事件中直接触发并调用这个函数  Functions.Execute("mukuyema",“A”)
--  作者:有点蓝
--  发布时间:2023/11/15 10:43:00
--  
建议还是认真看看这个帮助:http://www.foxtable.com/webhelp/topics/0604.htm,按钮的e参数只有:http://www.foxtable.com/webhelp/topics/0732.htm。不要随便把a事件的参数用到b事件

另外函数的定义也要认真看看:http://www.foxtable.com/webhelp/topics/1486.htm

上面代码定义了2个参数:
Dim dr As DataRow = Args(0) 第一个参数是一个DataRow 
Dim e As RequestEventArgs = Args(1) 第二个参数是RequestEventArgs ,RequestEventArgs 只有httprequest事件才有,其它事件表格表格按钮都不可能有的,所以如果这个函数是在按钮里使用,也算是乱用。

如果要在按钮里使用这个函数,必须去掉函数里的第二个参数,然后按钮大概可以这样调用
Functions.Execute("mukuyema",tables(xxx).current.datarow)