以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  职员档案已使用部门,部门档案不能再增加下级  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=63794)

--  作者:blsu33
--  发布时间:2015/1/28 22:03:00
--  职员档案已使用部门,部门档案不能再增加下级
有点甜老师,
      有两个档案,部门档案和职员档案
      部门档案怎么达到,职员档案中已使用了该部门,部门档案不能增加二级,已经使用了递归的函数
部门档案的befor add datarow怎么写代码(没有e参数) 类似如下  

Select Case e.DataCol.Name                                                                                        
    Case "编码名称"
        Dim dr As DataRow
        dr = DataTables("职员档案").Find("部门名称 = \'" & e.DataRow & "\'")
            If dr IsNot Nothing Then
                MessageBox.Show("已职员档案中使用,不能增加下级","提示")
                e.Cancel = True
            End If
      Case "编码规则"
        Dim dr As DataRow
        dr= DataTables("职员档案").Find("部门编码 = \'" & e.DataRow & "\'")
            If dr IsNot Nothing Then
                MessageBox.Show("已职员档案中使用,不能增加下级","提示")
                e.Cancel = True
            End If
End Select                                                                                                                                                                                                                                                                              
[此贴子已经被作者于2015-1-28 22:10:46编辑过]

--  作者:有点甜
--  发布时间:2015/1/28 22:10:00
--  

 肯定不应该beforeAddDataRow事件处理。

 

 因为你这个时候,你还没有填入部门名称,怎么知道是否被使用了?

 

 去Datacolchanged事件处理。


--  作者:blsu33
--  发布时间:2015/1/28 22:32:00
--  
Datacolchanged现在的代码,跪求老师帮忙改下

Select Case e.DataCol.Name                                                                                                \'更改编码规则的重新定义开始
    Case "编码规则"
        If e.NewValue IsNot Nothing Then
            Dim dr As DataRow = DataTables("分类编码方案").Find("基础档案名称 = \'" & e.DataTable.Name & "\'")
            If dr IsNot Nothing Then
                Dim sum As Integer
                For i As Integer = 0 To dr("编码规则").Length - 1
                    sum += val(dr("编码规则")(i))
                    If e.NewValue.length = sum Then
                        e.DataRow("编码级次") = dr("编码级次")(i)
                        Exit For
                    End If
                Next
            End If
        End If
End Select                                                                                                \'更改编码规则的重新定义结束


If e.DataCol.Name = "编码规则" AndAlso e.NewValue <> Nothing Then                                            \'更改编码规则的是否末级的重新定义开始
    Dim fdr As DataRow = DataTables("分类编码方案").Find("基础档案名称 = \'" & e.DataTable.Name & "\'")
    If fdr IsNot Nothing Then
        Dim reg As new System.Text.RegularExpressions.Regex(fdr("正则"))
        If reg.Ismatch(e.NewValue) = False Then
            e.Cancel = True
        Else
            e.DataRow("是否末级") = (fdr("字符数") = e.NewValue.length)\'我加的
            Dim count As Integer = 0
            Dim prev As String = ""
            For i As Integer = 0 To fdr("编码规则").length - 1
                count += val(fdr("编码规则").chars(i))
                
                Dim str As String = e.NewValue.Substring(0, count)
                If count < e.NewValue.length Then
                    If e.DataTable.Find("编码规则 = \'" & str & "\'") Is Nothing Then
                        MessageBox.Show("缺少上级科目:" & str,"提示",MessageBoxButtons.OK)
                        e.Cancel = True
                        e.DataRow("是否末级")=False
                        Exit For
                    Else If e.OldValue = str Then
                        MessageBox.Show("缺少上级科目:" & str,"提示",MessageBoxButtons.OK)
                        e.Cancel = True
                        Exit For
                    End If
                Else If count = e.NewValue.length  Then
                    If i = fdr("编码规则").length - 1 Then
                        e.DataRow("是否末级") = True
                        e.DataTable.ReplaceFor("是否末级", False, "编码规则 = \'" & prev & "\'")
                    Else
                        Dim filter As String = "编码规则 <> \'" & str & "\' and 编码规则 like \'" & str & "*\'"
                        If  e.DataTable.Find(filter) Is Nothing Then
                            e.DataRow("是否末级") = True
                            filter = "编码规则 = \'" & prev & "\'"
                            e.DataTable.ReplaceFor("是否末级", False, filter)
                        Else
                            e.DataRow("是否末级") = False
                        End If
                        
                        Exit For
                    End If
                End If
                prev = str
            Next
        End If
    End If
End If   

                                                                                                         \'更改编码规则的是否末级的重新定义结束

--  作者:有点甜
--  发布时间:2015/1/28 22:35:00
--  
  以前给你写过了啊。在Datacolchanging 或者 Datacolchanged,加入1楼的代码啊。
--  作者:blsu33
--  发布时间:2015/1/28 22:47:00
--  
1楼代码只是解决了一级科目不允许增加,如下例子:
部门档案使用正则 编码为2+2

  01 财务部  在职员档案中已使用 
  现在的问题是,01 财务部已经在职员档案中使用,那么,不允许部门档案再增加01财务部下的部门0101 出纳,是这个意思。

--  作者:有点甜
--  发布时间:2015/1/28 22:50:00
--  

  用like就行啊。

 

dr = DataTables("职员档案").Find("部门名称 like \'" & e.DataRow("部门名称") & "%\'")