根据卷宗id进行分组, 然后按照排序码顺序,结合材料页码数据,开始页从1开始编号,并计算结束页。
当排序码发生变化时或材料页码发生变化时都要能够自动更新开始和结束页数据
此主题相关图片如下:1111.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/19 4:07:34编辑过]
老师 现在这个过程是加入了表事件代码中的 有没有办法直接弄在内部函数中呢?因为实际项目时,不会加载表,都是sql语句执行或内部函数直接运行呢
1、定义内部函数(根据卷宗id与排序码来实现页数变化后自动生成开始页与结束页):
Dim juanzongid As string= Args(0)
Dim cmd As New SQLCommand
cmd.Co nne cti onN ame = "主数据源"
Dim dt As DataTable
cmd.CommandText = "SE L ECT * From {案件卷宗材料信息} "
dt = cmd.ExecuteReader(True)
Dim Products2 As List(Of String())
Products2 = dt.GetValues("卷宗id|排序码")
For Each Product2 As String() In Products2 '遍历卷宗id
Dim idx As Integer = 1
Output.Show(Product2(0))
Output.Show(Product2(1))
Dim dr As DataRow = dt.Find("卷宗id='" & Product2(0) & "' and 排序码<'" & Product2(1) & "'", "排序码 desc")
If dr IsNot Nothing Then
idx = dr("结束页") + 1
End If
For Each dr In dt.Sele ct("卷宗id = '" & Product2(0) & "' and 排序码>='" & Product2(1) & "'", "排序码")
dr("开始页") = idx
dr("结束页") = idx + dr("材料页码")
idx = dr("结束页") + 1
Next
dr.save
Next
2、后端函数:(接受前端传递的卷宗id,然后传递给内部函数,让内部函数计算当前卷宗id下的所有材料按照排序码的顺序结合文件页数计算开始页与结束页)
Public Sub yemajisuan_Ajax(rq As
Request)
Dim e As RequestEventArgs = rq.e
Functions.Execute("根据卷宗id与排序码来实现页数变化后自动生成开始页与结束页", e.values("卷宗id"))
End Sub
3、前端使用:(传递卷宗id值给后端函数)
$.post("yemajisuan.Ajax", {
卷宗id:e.form.guid;
},
function(res) {
console.log(res)
})
当前用命令行执行如上内部函数代码:得到的结果值不对,
1,第一行开始页是1,结束页为2;第二行开始页就应该为3,结果显示2,结束页是7 是正确
2、第一行开始页是1,结束页为为6?不对,结束页应该为5,第二行开始页应该为6,结果显示为2,结束页应该为30,结果显示27
此主题相关图片如下:1111.png
[此贴子已经被作者于2023/11/20 4:23:20编辑过]
Dim juanzongid As String = Args(0)
Dim cmd As New SQLCommand
cmd.C
Dim dt As DataTable
cmd.CommandText = "SELECT * From {案件卷宗材料信息} where 卷宗id='" & juanzongid & "'"
dt = cmd.ExecuteReader(True)
If dt.DataRows.Count > 0 Then
Dim idx As Integer = 1
For Each dr As DataRow In dt.Select("", "排序码") '遍历卷宗id
dr("开始页") = idx
dr("结束页") = idx + dr("材料页码")
idx = dr("结束页") + 1
Next
dt.save
End If
老师 运行结果还是和楼上的是一样的哦 还得继续麻烦老师
此主题相关图片如下:111.png
第一个只有1页 那么开始页就应该是1 结束页也是1啊
第二个只有5页 那么开始页就是2,结束页就是6啊
哦,小学数学种树问题容易犯的错误,加之后再减1就行了
dr("结束页") = idx + dr("材料页码") - 1