有一材料表(数据参考如下:)类别 名称 页数 开始页码 结束页码
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编辑过]
If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
dr = e.DataRow
dr("开始页码") = 1Else
dr("开始页码") = dr("结束页码") + 1
End If
老师 红色部分会报错 这个有没有办法直接弄成狐表内部函数呢?
比如函数名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()
老师 是放在内部函数里面的 怎么修正呢?没有达到预期 是想直接在内部函数就定义好
然后通过直接调用函数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()
建议还是认真看看这个帮助:
http://www.foxtable.com/webhelp/topics/0604.htm,按钮的e参数只有:
http://www.foxtable.com/webhelp/topics/0732.htm。不要随便把a事件的参数用到b事件
上面代码定义了2个参数:
Dim dr As DataRow = Args(0) 第一个参数是一个DataRow
Dim e As RequestEventArgs = Args(1) 第二个参数是RequestEventArgs ,RequestEventArgs 只有httprequest事件才有,其它事件表格表格按钮都不可能有的,所以如果这个函数是在按钮里使用,也算是乱用。
如果要在按钮里使用这个函数,必须去掉函数里的第二个参数,然后按钮大概可以这样调用
Functions.Execute("mukuyema",tables(xxx).current.datarow)