以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]动态绑定的记录窗口  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=162112)

--  作者:2425004926
--  发布时间:2021/4/6 12:56:00
--  [求助]动态绑定的记录窗口
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:记录窗口行高测试.rar



动态绑定的记录窗口,我用      “任务设置”表      “记录窗口”列     动态设置记录窗口要显示的列及高度,当“记录窗口”列为空时就显示全部列,高度也为1,可总是出错,请老师帮助
试验:当点击任务“表A”或“表B”,再点击“表C"就会出错

Dim dt1 As Table = Tables(e.Form.name & "_table1")
Dim dr0 As DataRow = DataTables("任务设置").find("任务标题 = \'" & e.link.text & "\'")
dt1.DataSource = DataTables(e.link.name)   \'动态绑定表

\'记录窗口
Dim rgd As WinForm.RecordGrid = e.Form.Controls("RecordGrid1")   \'记录窗口
\'rgd.Table = dt1   ‘放在这里出错
If dr0.IsNull("记录窗口") = False Then
    Dim sz() As String = dr0("记录窗口").split("|")
    \'得到要显示的列
    Dim xt2 As String
    For i As Integer = 0 To sz.Length -1
        If i Mod 2 = 0 Then
            xt2 = xt2 & "|" & sz(i)
        End If
    Next
    xt2 = xt2.Trim("|")
    rgd.Columns = xt2   \'批量设置要显示的列
    \'遍历要显示的高度
    For i As Integer = 0 To sz.Length -1
        If i Mod 2 = 0 Then
            dt1.Cols(sz(i)).RecordRowHeight = Val(sz(i+1)) \'显示高度
        End If
    Next
End If
rgd.Table = dt1   ’放在这里也出错
rgd.Build() \'重新生成记录窗口

--  作者:有点蓝
--  发布时间:2021/4/6 14:01:00
--  
只要设置了一次显示列rgd.Columns,那么换表后也必须重新设置显示列rgd.Columns。表C没有设置显示列rgd.Columns所以出错
--  作者:2425004926
--  发布时间:2021/4/6 14:19:00
--  
 谢谢!根据老师的指点,我重新改动了一下,OK

Dim dt1 As Table = Tables(e.Form.name & "_table1")
Dim dr0 As DataRow = DataTables("任务设置").find("任务标题 = \'" & e.link.text & "\'")
dt1.DataSource = DataTables(e.link.name)   \'动态绑定表

    rgd.Table = dt1
    Dim xt2 As String
    If dr0.IsNull("记录窗口") Then   \'如果不是空值,部分显示,如果为空,显示全部列
        For Each dc As DataCol In dt1.DataTable.DataCols
            xt2 = xt2 & "|" & dc.name
        Next
        xt2 = xt2.Trim("|")
        rgd.Columns = xt2   \'批量设置要显示的列
    Else
        Dim sz() As String = dr0("记录窗口").split("|")
        \'得到要显示的列
        For i As Integer = 0 To sz.Length -1
            If i Mod 2 = 0 Then
                xt2 = xt2 & "|" & sz(i)
            End If
        Next
        xt2 = xt2.Trim("|")
        rgd.Columns = xt2   \'批量设置要显示的列
        \'遍历要显示的高度
        For i As Integer = 0 To sz.Length -1
            If i Mod 2 = 0 Then
                dt1.Cols(sz(i)).RecordRowHeight = Val(sz(i+1)) \'显示高度
            End If
        Next
    End If
    rgd.Build() \'重新生成记录窗口