以文本方式查看主题

-  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=92845)

--  作者:落叶孤影
--  发布时间:2016/11/14 20:48:00
--  某一列的内容被更改后问题
我在表的DataColChanged事件 写了下面的代码:但为什么总是弹出两次提示呢?请老师帮忙看看是什么问题?谢谢!
If e.DataRow("科目代码") = Nothing Then
    Return
End If
Select Case e.DataRow("科目代码").length
    Case "4"
        e.DataRow("科目级次") = "1"
    Case "6"
        e.DataRow("科目级次") = "2"
    Case Else
        e.DataRow("科目代码") = Nothing
        e.DataRow("科目级次") = Nothing
        MessageBox.Show("请重新输入4或6位数的科目代码!","错误!",MessageBoxButtons.OK,MessageBoxIcon.Error)
End Select

--  作者:有点蓝
--  发布时间:2016/11/14 20:53:00
--  
试试

If e.DataRow.isnull("科目代码") Then
    Return 
End If

--  作者:落叶孤影
--  发布时间:2016/11/15 21:11:00
--  
上面的问题解决了,但下在该事件中的另一段代码不会写了,还请老师给看看下面代码该怎么写?谢谢!

If CurrentTable.Current.DataRow.RowState = DataRowState.Added Then
    If e.DataCol.Name = "科目代码" Then \' 如果发生变化的是科目代码列
        Dim nw As String = e.NewValue
        Dim dr As String = e.DataRow("科目代码")
        If nw.Contains(dr) Then \' 如果新输入的值包含当前列中的值
            Dim drs As DataRow
            drs = e.DataTable.Find() \' 找到包含值的行==========此处不会写代码,请老师指点!谢谢!
            If drs IsNot Nothing Then \' 如果找到
                drs("是否明细") = False \' 将该行是否明细列设为False
            Else
            End If
        Else
        End If
    End If
Else
End If

--  作者:有点蓝
--  发布时间:2016/11/15 21:21:00
--  
没看懂你的逻辑,不知道你要找什么


--  作者:落叶孤影
--  发布时间:2016/11/15 21:56:00
--  
 我的意思是:比如当前表的科目代码列有一行数据是1001,我如果新增了一行,在新增行的科目代码列输入100101时,1001行对应的"是否明细"列为fals
--  作者:有点蓝
--  发布时间:2016/11/15 22:16:00
--  
没有办法判断,100101的前缀是1001还是100还是10010
--  作者:落叶孤影
--  发布时间:2016/11/15 22:29:00
--  
 前缀是1001也就是新输入值的前4个字符!
--  作者:有点蓝
--  发布时间:2016/11/15 22:45:00
--  
If e.DataCol.Name = "科目代码" AndAlso e.DataRow.IsNull("科目代码") = False AndAlso e.DataRow.RowState = DataRowState.Added AndAlso e.DataRow("科目代码").Length > 4 Then \' 如果发生变化的是科目代码列
    Dim nw As String = e.NewValue
    If e.DataTable.Find("科目代码=\'" & nw.SubString(0,4) & "\'") IsNot Nothing Then
        e.DataTable.ReplaceFor("是否明细",False,"科目代码=\'" & nw.SubString(0,4) & "\'")
    End If
End If
[此贴子已经被作者于2016/11/15 22:45:05编辑过]

--  作者:落叶孤影
--  发布时间:2016/11/15 22:58:00
--  
 多谢,请早点休息!注意身体!晚安!