以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]行号读取的求助-已解决,底层放出完整代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=172021)

--  作者:huangfanzi
--  发布时间:2021/9/18 13:50:00
--  [求助]行号读取的求助-已解决,底层放出完整代码
在窗口中的SQLQuery表,新增一行后,将当前的行号填入到“生产计划编号”列中,我目前是如下做的,但不行,得到的结果永远是 1
DataRowAdded
Dim r As Row = CurrentTable.Current
e.DataRow("生产计划编号") = r.Index + 1

另外,如果我删除了任意一行,如果不是最后一行,希望下方记录的“生产计划编号”列列自动更新

请老师看看,谢谢!
[此贴子已经被作者于2021/9/18 14:53:19编辑过]

--  作者:有点蓝
--  发布时间:2021/9/18 14:13:00
--  
首先table的行号和数据库是没有任何关系的,不管是筛选,排序后第一行行号永远是1,没有什么业务意义。

其次不建议使用这个东西,假设有10W行数据,把第一行删除后,难道还得把后面的99999行数据改一下行号,扯淡吧

--  作者:huangfanzi
--  发布时间:2021/9/18 14:23:00
--  
我的意思是,新增2行或3行后,第2行或第3行还是显示1,如何能显示2或3,另外,这张表是某个计划的工序表,加载记录时会有限定,记录不会很多,不会超过100行,所以不存在执行效率问题
--  作者:有点蓝
--  发布时间:2021/9/18 14:31:00
--  
e.DataRow("生产计划编号") = e.datatable.datarows.count + 1
--  作者:huangfanzi
--  发布时间:2021/9/18 14:46:00
--  
解决问题了,给各位参考下,使用此代码要求加载的数据不能太多,因为用了遍历
DataRowAdded事件:以下代码解决新增行与插入行后,编号自动更新的问题
Dim tb As WinForm.Table = e.Form.Controls("生产计划辅表")
Dim t As Table = tb.Table
If t.Rows.Count > 0 Then
    For Each r As Row In t.Rows
        r("生产计划编号") = r.Index + 1
    Next
End If

DataRowDeleted事件:
Dim tb As WinForm.Table = e.Form.Controls("生产计划辅表")
Dim t As Table = tb.Table
If t.Rows.Count > 0 Then
    For Each r As Row In t.Rows
        r("生产计划编号") = r.Index + 1
    Next
End If

AfterMoveRow事件:上下移动行后更新行号
If e.Table.Rows.Count > 0 Then
e.Table.Rows(e.oldindex)("生产计划编号") = e.Table.Rows(e.oldindex).index+1
e.Table.Rows(e.newindex)("生产计划编号") = e.Table.Rows(e.newindex).index+1
End If

KeyDown事件:按 CTRL加 上下方向键实现  行的上下移动
If e.Control = True AndAlso e.Table.Current IsNot Nothing Then
    Select Case e.KeyCode
        Case Keys.Up
            Syscmd.Row.MoveUp()
        Case Keys.Down
            Syscmd.Row.MoveDown()
    End Select
End If