以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  切换表时特别卡  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=101454)

--  作者:jick0526
--  发布时间:2017/5/31 18:59:00
--  切换表时特别卡
老师,请问下为什么我切换表时特别卡,等很久才切换过来,软件里大概有30个表
--  作者:有点色
--  发布时间:2017/5/31 21:41:00
--  
 你是不是在prepareEdit或者drawcell事件或者项目事件maintableChanged写了什么耗时的代码?
--  作者:jick0526
--  发布时间:2017/6/1 18:59:00
--  
老师,我试了下是maintableChanged放太多东西了,我想问下,我想在切换表时,自动重置当前表的所有列,代码该怎么写,谢谢!
--  作者:有点色
--  发布时间:2017/6/1 20:49:00
--  

 有必要在切换的时候,就重置吗?为什么要重置?你datacolchanged事件写了什么代码?


--  作者:jick0526
--  发布时间:2017/6/1 21:45:00
--  
其他表还有类似这样的代码,每次重置才能刷新,很麻烦,所以才想到用切换表就自动重置
Select Case e.DataCol.Name
    Case "第一列","第二列","第三列"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("第一列") OrElse dr.IsNull("第二列") OrElse dr.IsNull("第三列") Then
        dr("第四列") = Nothing    
        Else
            Dim filter As String
            filter = "第一列 = \'" & dr("第一列") & "\' And 第二列 = \'" & dr("第二列") & "\' And 第三列 = \'" & dr("第三列") & "\'"
            pr = DataTables("Mps_Future").Find(filter)
           
If pr IsNot Nothing Then
         

 e.DataRow("第四列") = "已上传"
        Else
            e.DataRow("第四列") = "未上传"
        End If
End If
End Select

Select Case e.DataCol.Name
    Case "第一列","第二列","第三列"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("第一列") OrElse dr.IsNull("第二列") OrElse dr.IsNull("第三列") Then
        Else
            Dim filter As String
            filter = "第一列 = \'" & dr("第一列") & "\' And 第二列 = \'" & dr("第二列") & "\' And 第三列 = \'" & dr("第三列") & "\'"
            pr = DataTables("Mps_Future").Find(filter)
            If pr IsNot Nothing Then
                pr("第四列") = "已上传"
            End If
        End If
End Select

If e.DataCol.Name = "第三列新" AndAlso e.NewValue > 0 Then 
e.DataRow("第三列") = e.DataRow("第三列新")
End  If

If e.DataCol.name = "第五列" Then
 If e.NewValue.length = 8 Then
 Dim d As Date = new Date(e.NewValue.Substring(0,4), e.newvalue.substring(4,2), e.newvalue.substring(6,2))
 e.DataRow("第五列")= d
 End If
End If

Select Case e.DataCol.Name
    Case "北京"
        If e.DataRow.IsNull("北京") = False Then
     Dim nma() As String = {"1","2","3","4","5","6","7","8","9","10","11","12"} \'
            Dim nmb() As String = {"1","2","3","4","5","6","7","8","9","10","11","12"} \'
            Dim dr As DataRow = DataTables("7").AddNew()    
           For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
End If
End Select

--  作者:jick0526
--  发布时间:2017/6/1 21:47:00
--  
老师,如果切换表时,只自动重置当前的表应该不会卡吧,又不是切换表时所有表的列都重置了
--  作者:有点色
--  发布时间:2017/6/1 22:05:00
--  

 那你就判断表名,然后重置列,如

 

If mainTable.Name = "表A" Then

 

ElseIf mainTable.Name = "表B" Then

 

 

End If


--  作者:jick0526
--  发布时间:2017/6/1 22:18:00
--  
老师,这样的代码能帮我写一下吗?如果打开的是表A,那么自动重置表A的A列,B列,C列
--  作者:有点色
--  发布时间:2017/6/1 23:10:00
--  
If MainTable.Name = "表A" Then
    MainTable.DataTable.DataCols("A列").RaiseDataColChanged
    MainTable.DataTable.DataCols("B列").RaiseDataColChanged
    MainTable.DataTable.DataCols("C列").RaiseDataColChanged
ElseIf MainTable.Name = "表B" Then
   
End If