以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  table 定位行的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91286)

--  作者:yancheng
--  发布时间:2016/10/6 19:58:00
--  table 定位行的问题
导入材料明细,表事件,CurrentChanged中写入:

If Forms("导入材料").Opened AndAlso Forms.ActiveForm.Name = "导入材料"  Then
    Dim dr As Row = Tables("导入材料.导入材料明细").Current
    If dr IsNot Nothing AndAlso dr.IsNull("定额编码")=False Then
        Dim i As Integer= Tables("材料").FindRow("定额编码 = \'" & dr("定额编码") & "\'")
        If i >= 0 Then
            SystemReady = False
            \'Tables("材料").Filter = ""
            Tables("材料").Position = i
            SystemReady = True
        End If
    End If
End If

现在的问题是,table 材料,表,并列窗口中,已经进行了筛选.
我发现在上面的代码不执行。或者说是:找不到,这个:定额编码了。

刚才开始想我在代码里面,把: \'Tables("材料").Filter = ""  , 这一句用上,但是也不起作用。且我在改变:导入材料明细,当前行时,运行变慢,改变一行,要1秒左右。好慢。

我需要怎么处理上面的代码呢?
[此贴子已经被作者于2016/10/6 19:59:31编辑过]

--  作者:有点蓝
--  发布时间:2016/10/7 8:55:00
--  
If Forms("导入材料").Opened AndAlso Forms.ActiveForm.Name = "导入材料"  Then
    Dim dr As Row = Tables("导入材料.导入材料明细").Current
    If dr IsNot Nothing AndAlso dr.IsNull("定额编码")=False Then
        Tables("材料").Filter = Tables("材料").Filter & " or 定额编码 = \'" & dr("定额编码") & "\'"
        Dim i As Integer= Tables("材料").FindRow("定额编码 = \'" & dr("定额编码") & "\'")
        If i >= 0 Then
            SystemReady = False
            Tables("材料").Position = i
            SystemReady = True
        End If
    End If
End If

--  作者:yancheng
--  发布时间:2016/10/7 11:33:00
--  
.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2016.7.29.1
错误所在事件:
详细错误信息:
语法错误:“Or”运算符前缺少操作数。

  Tables("材料").Filter = Tables("材料").Filter & " or 定额编码 = \'" & dr("定额编码") & "\'"
这个代码是什么意思 ?

我现在的问题是, 当table 材料表,进行了filter后,  导入材料明细表,的当前行事件,不能找到这个:定额编码,材料行。无法定位。
[此贴子已经被作者于2016/10/7 11:38:04编辑过]

--  作者:有点蓝
--  发布时间:2016/10/7 11:49:00
--  
If Forms("导入材料").Opened AndAlso Forms.ActiveForm.Name = "导入材料"  Then
    Dim dr As Row = Tables("导入材料.导入材料明细").Current
    If dr IsNot Nothing AndAlso dr.IsNull("定额编码")=False Then
        Dim filter As String = "定额编码 = \'" & dr("定额编码") & "\'"
        Dim dr2 As DataRow = DataTables("材料").Find(filter)
        If dr2 Is Nothing Then
            Dim drs As List(of DataRow) = DataTables("材料").AppendLoad(filter, False)
            If drs.Count > 0 Then
                dr2 = drs(0)
            Else
                msgbox("不存在这个定额编码")
                Return
            End If
        End If
        If Tables("材料").Filter > 0 Then
            Tables("材料").Filter = Tables("材料").Filter & " or 定额编码 = \'" & dr("定额编码") & "\'"
        End If
        Dim i As Integer= Tables("材料").FindRow(dr2)
        If i >= 0 Then
            SystemReady = False
            Tables("材料").Position = i
            SystemReady = True
        End If
    End If
End If

再不行就上例子测试

--  作者:yancheng
--  发布时间:2016/10/7 13:17:00
--  
弹错。


\'从字符串" Or 定额编码 = \'010043\' or 定额编码 = \'0"到类型"Double"的转换无效.
\'输入字符串的格式不正确.
\'

      If Tables("材料").Filter > 0 Then
            Tables("材料").Filter = Tables("材料").Filter & " or 定额编码 = \'" & dr("定额编码") & "\'"

 这个两段代码,怎么理解 ?
[此贴子已经被作者于2016/10/7 13:46:28编辑过]

--  作者:yancheng
--  发布时间:2016/10/7 13:54:00
--  
If Forms("导入材料").Opened AndAlso Forms.ActiveForm.Name = "导入材料"  Then
    Tables("材料").Filter = ""
    Dim dr As Row = Tables("导入材料.导入材料明细").Current
    If dr IsNot Nothing AndAlso dr.IsNull("定额编码")=False Then
        Dim i As Integer= Tables("材料").FindRow("定额编码 = \'" & dr("定额编码") & "\'")
        If i >= 0 Then
            SystemReady = False
            Tables("材料").Position = i
            SystemReady = True
        End If
    End If
End If

上面的代码,能满足我的需要。

只是上面的代码,在每一次:导入材料明细,表的当前行切换时,都 会把TABLE材料表,FILTER一遍。
这样,切换,导入材料明细表,当前行时,反应时间较长:1秒左右,影响,使用速度。
需要怎么改一下,这段代码呢?

我想的是,有没有一个代码。判断,TBALE表,是否作了:筛选。判断它?
[此贴子已经被作者于2016/10/7 13:54:47编辑过]

--  作者:有点蓝
--  发布时间:2016/10/7 14:21:00
--  
If Tables("材料").Filter > 0 Then

改为

If Tables("材料").Filter > ""  Then \'可以用这个判断是否有筛选条件

--  作者:yancheng
--  发布时间:2016/10/7 17:14:00
--  
OK 了。
If Tables("材料").Filter > ""  Then \'可以用这个判断是否有筛选条件
这个判断加上,可以的。


Tables("材料").Filter = Tables("材料").Filter & " or 定额编码 = \'" & dr("定额编码") & "\'"

我始终没有看懂这个代码,是怎么个意思 ?这个代码没错吗?

--  作者:有点蓝
--  发布时间:2016/10/7 17:18:00
--  
如果Filter不包含这个定额编码,就包含进来,这样就可以把指定的定额编码筛选出来