以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  窗口动态生成表的行怎样定义  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=160283)

--  作者:采菊东篱下
--  发布时间:2021/1/27 15:37:00
--  窗口动态生成表的行怎样定义
  双击缴费情况表弹出窗口,然后通过窗口把缴费情况表中当前行单号相同的行显示到弹窗上,就象ERP中双击账上的行,弹出当前录入凭证,同一份凭证有很多行数据,因此定义dts行集合没错,因为只引用这部份行,现在的问题是如何定义弹出的窗口中的行,然后赋值,错误应该就出在这,你给出的
Dim r As DataRow = Forms("月租收费").Controls("Table1").Table.current.DataRow
能正确显示一行,显然不能只定义当前行,而应定义所有行,我一直问的就是这个。
If e.Row.IsNull("车牌号码") = False AndAlso e.Row.IsNull("缴费_月租_缴费金额") Then
    Forms("临时收费录入").Open()
ElseIf e.Row.IsNull("车牌号码") = False AndAlso e.Row.IsNull("缴费_临时停放_缴费金额") Then
    Forms("月租收费").Open()
    Forms("月租收费").Controls("rq").text = e.Row("日期")
    Forms("月租收费").Controls("dh").text = e.Row("单号")
    Forms("月租收费").Controls("lry").text = e.Row("录入员")
    Forms("月租收费").Controls("shr").text = e.Row("审核人")
    Dim dts As List(of DataRow) = DataTables("缴费情况").SQLSelect("[单号] = \'" & e.Row("单号") & "\'")
    For Each dt As DataRow In dts
  Dim r As DataRow = Forms("月租收费").Controls("Table1").Table.current.DataRow \'这样定义只显示一行  
    \'Dim r As DataRow = Forms("月租收费").Controls("Table1").Table.DataTable.DataRow \'这是我错误的定义
        r("车牌号码") = dt("车牌号码")
        r("备注") = dt("备注")
        r("缴费_月租_起计日期") = dt("缴费_月租_起计日期")
        r("缴费_月租_止计日期") = dt("缴费_月租_止计日期")
        r("缴费_月租_月租单价") = dt("缴费_月租_月租单价")
    Next
End If
[此贴子已经被作者于2021/1/27 15:41:19编辑过]

--  作者:采菊东篱下
--  发布时间:2021/1/27 18:06:00
--  
我去年做的排赛代码,其中有这样一段引用代码,是从一个表引用到另一个表,效果是没问题的,道理一样,这段代码删除表上已有的行重新添加行,现无需添加,因已存在空行,只需定义窗口表上的行就行,你给我的循环定义,无法实现我要的效果。
        tbl.Table.DataTable.DataRows.Clear
        Dim drs1 As List(of DataRow) = DataTables("比赛积分").SQLSelect("[团体赛或个人赛] = \'" & lx & "\' And [棋赛名称] = \'" & di1 & "\' And [第几轮比赛] = \'" & di2 & "\' And [所属团体或个人分组] = \'" & Str & "\'","","日期 Desc,团体赛或个人赛,棋赛名称,所属团体或个人分组,排序 Desc")
        For i As Integer = 0 To drs1.Count - 1 Step 2
            If i + 1 <= drs1.Count - 1
                Dim nr As DataRow = tbl.Table.DataTable.AddNew()
                nr("桌号") = drs1(i)("排序")
                nr("红方_编号") = drs1(i)("编号")
                nr("红方_姓名") = drs1(i)("姓名")
                nr("黑方_编号") = drs1(i+1)("编号")
                nr("黑方_姓名") = drs1(i+1)("姓名")
            End If
        Next

--  作者:采菊东篱下
--  发布时间:2021/1/27 18:08:00
--  
你在另帖上的回复
for each r As Row in Forms("月租收费").Controls("Table1").Table.Rows
生成很多重复行

--  作者:采菊东篱下
--  发布时间:2021/1/27 18:17:00
--  
你看缴费情况表DoubleClick事件中间注识的代码,月租收费窗口中的表是空表。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理2021012703.foxdb

密码:888888

--  作者:采菊东篱下
--  发布时间:2021/1/27 19:18:00
--  
这样写只显示一行
If e.Row.IsNull("车牌号码") = False AndAlso e.Row.IsNull("缴费_月租_缴费金额") Then
    Forms("临时收费录入").Open()
ElseIf e.Row.IsNull("车牌号码") = False AndAlso e.Row.IsNull("缴费_临时停放_缴费金额") Then
    Forms("月租收费").Open()
    Forms("月租收费").Controls("Table1").Table.DataTable.DataRows.Clear \'或 DataTables("月租收费_Table1").DataRows.Clear
    Forms("月租收费").Controls("rq").text = e.Row("日期")
    Forms("月租收费").Controls("dh").text = e.Row("单号")
    Forms("月租收费").Controls("lry").text = e.Row("录入员")
    Forms("月租收费").Controls("shr").text = e.Row("审核人")
    Dim dts As List(of DataRow) = DataTables("缴费情况").SQLSelect("[单号] = \'" & e.Row("单号") & "\'")
    For i As Integer = 0 To dts.count - 1
        Dim r As DataRow = Forms("月租收费").Controls("Table1").Table.DataTable.AddNew() \'或 Dim r As DataRow = DataTables("月租收费_Table1").AddNew()
        r("车牌号码") = dts(i)("车牌号码")
        r("备注") = dts(i)("备注")
        r("缴费_月租_起计日期") = dts(i)("缴费_月租_起计日期")
        r("缴费_月租_止计日期") = dts(i)("缴费_月租_止计日期")
        r("缴费_月租_月租单价") = dts(i)("缴费_月租_月租单价")
        i + = 1
    Next
End If
[此贴子已经被作者于2021/1/27 19:44:39编辑过]

--  作者:采菊东篱下
--  发布时间:2021/1/27 22:27:00
--  
\'方法二:效果并没有添加第二行数据。
If Tables("缴费情况").Current.IsNull("车牌号码") = False AndAlso Tables("缴费情况").Current.IsNull("缴费_月租_缴费金额") Then
    Forms("临时收费录入").Open()
ElseIf Tables("缴费情况").Current.IsNull("车牌号码") = False AndAlso Tables("缴费情况").Current.IsNull("缴费_临时停放_缴费金额") Then
    Forms("月租收费").Open()
    Forms("月租收费").Controls("Table1").Table.DataTable.DataRows.Clear
    Forms("月租收费").Controls("rq").text = Tables("缴费情况").Current("日期")
    Forms("月租收费").Controls("dh").text = Tables("缴费情况").Current("单号")
    Forms("月租收费").Controls("lry").text = Tables("缴费情况").Current.DataRow("录入员")
    Forms("月租收费").Controls("shr").text = Tables("缴费情况").Current.DataRow("审核人")
    Dim dts As List(of DataRow) = DataTables("缴费情况").SQLSelect("[单号] = \'" & Forms("月租收费").Controls("dh").text & "\'")
    For i As Integer = 0 To dts.count - 1
        Dim r As DataRow = DataTables("月租收费_Table1").AddNew()
        r("车牌号码") = dts(i)("车牌号码")
        r("备注") = dts(i)("备注")
        r("缴费_月租_起计日期") = dts(i)("缴费_月租_起计日期")
        r("缴费_月租_止计日期") = dts(i)("缴费_月租_止计日期")
        r("缴费_月租_月租单价") = dts(i)("缴费_月租_月租单价")
        i + = 1
    Next
    If dts.count < 10 Then
        Dim r As DataRow = DataTables("月租收费_Table1").AddNew(10 - (dts.count))
    End If
End If


--  作者:有点蓝
--  发布时间:2021/1/28 9:06:00
--  
去掉:i + = 1
--  作者:采菊东篱下
--  发布时间:2021/1/28 12:34:00
--  
这方法我点击同单号的第二行,窗口里显示的是从当前行开始算的两行数据,连不同单号的数据都带进来。
If e.Row.IsNull("车牌号码") = False AndAlso e.Row.IsNull("缴费_临时停放_缴费金额") = False Then
    Forms("临时收费录入").Open()
    DataTables("临时收费录入_Table1").DataRows.Clear
    Forms("临时收费录入").Controls("rq").text = e.Row("日期")
    Forms("临时收费录入").Controls("dh").text = e.Row("单号")
    Forms("临时收费录入").Controls("lry").text = e.Row("录入员")
    Forms("临时收费录入").Controls("shr").text = e.Row("审核人")
    Dim dts As List(of DataRow) = DataTables("缴费情况").SQLSelect("[单号] = \'" & Forms("临时收费录入").Controls("dh").text & "\'")
    For i As Integer = 0 To dts.count - 1
        Dim r As DataRow = DataTables("临时收费录入_Table1").AddNew()
        r("车牌号码") = dts(i)("车牌号码")
        r("备注") = dts(i)("备注")
        r("缴费_临时停放_起计时间") = dts(i)("缴费_临时停放_起计时间")
        r("缴费_临时停放_止计时间") = dts(i)("缴费_临时停放_止计时间")
    Next
    If dts.count < 10 Then
        Dim r As DataRow = DataTables("临时收费录入_Table1").AddNew(10 - (dts.count))
    End If
ElseIf e.Row.IsNull("车牌号码") = False AndAlso e.Row.IsNull("缴费_月租_缴费金额") = False Then
    Forms("月租收费").Open()
    DataTables("月租收费_Table1").DataRows.Clear
    Forms("月租收费").Controls("rq").text = e.Row("日期")
    Forms("月租收费").Controls("dh").text = e.Row("单号")
    Forms("月租收费").Controls("lry").text = e.Row("录入员")
    Forms("月租收费").Controls("shr").text = e.Row("审核人")
    Dim dts As List(of DataRow) = DataTables("缴费情况").SQLSelect("[单号] = \'" & Forms("月租收费").Controls("dh").text & "\'")
    For i As Integer = 0 To dts.count - 1
        Dim r As DataRow = DataTables("月租收费_Table1").AddNew()
        r("车牌号码") = dts(i)("车牌号码")
        r("备注") = dts(i)("备注")
        r("缴费_月租_起计日期") = dts(i)("缴费_月租_起计日期")
        r("缴费_月租_止计日期") = dts(i)("缴费_月租_止计日期")
        r("缴费_月租_月租单价") = dts(i)("缴费_月租_月租单价")
    Next
    If dts.count < 10 Then
        Dim r As DataRow = DataTables("月租收费_Table1").AddNew(10 - (dts.count))
    End If
End If
[此贴子已经被作者于2021/1/28 13:34:45编辑过]

--  作者:有点蓝
--  发布时间:2021/1/28 13:59:00
--  
没看懂表达的什么意思,截图说明一下
--  作者:采菊东篱下
--  发布时间:2021/1/28 14:09:00
--  
  哦,改用e.Row就没问题了,刚才我用Tables("缴费情况").Current来试,引用到窗口单上的行是从点击的当前行算第一行,向下引用两行到窗口上,不管单号是否相符,现在改用e.Row就没问题了。
[此贴子已经被作者于2021/1/28 14:09:48编辑过]