Foxtable(狐表)用户栏目专家坐堂 → [求助]PrepareEdit执行代码目录树, 死机


  共有4667人关注过本帖树形打印复制链接

主题:[求助]PrepareEdit执行代码目录树, 死机

帅哥哟,离线,有人找我吗?
jnletao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
[求助]PrepareEdit执行代码目录树, 死机  发帖心情 Post By:2014/3/12 13:51:00 [显示全部帖子]

PrepareEdit 执行


If e.RecordGrid Is Nothing Then '如果不是在记录窗口输入数据
    e.Cancel = True '则取消输入
Else
    If e.IsFocusCell Then
        If e.Col.name = "项目类别" AndAlso e.Row("收付") = 1 Then
            Dim tb As New DropTreeBuilder
            tb.SourceTable = DataTables("基础类别") '指定目录树表
            tb.TreeCols = "{类别归属}" '指定用于生成目录树的列,用大括号括起来
            tb.SourceCols = "类别名称"   ' 字符型,指定数据来源列
            tb.ReceiveCols = "项目类别" '指定数据接收列
            tb.TreeFilter = "[级别] > 0 And SubString([类别归属],1,6) = '收费项目类别'"
            tb.PathSeparator = "\" '指定路径分割符号
            e.Col.DropTree = tb.Build()
        End If
    End If
End If


在记录窗口 操作下拉目录树后,系统菜单 全黑,不报错,但是软件死机,只能结束进程

 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/12 14:53:00 [显示全部帖子]

单独 例子 测试正常, 不过我查看正个项目代码也没发现与 它有 冲突的 地方

 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/12 15:10:00 [显示全部帖子]

关键是不报错呀,CPU 瞬间 100%了,
这是于它可能有关的代码

MainTableChanging

 

Dim frm As WinForm.Form = Forms.ActiveForm

If frm IsNot Nothing Then

    If  DataTables(e.OldTableName).HasChanges Then

        Messagebox.Show("你的" & e.OldTableName & "还有记录未保存," & vbcrlf & "请先保存(或撤销)后再切换至其它窗口!","保存提示",MessageBoxButtons.OK,MessageBoxIcon.Information)

        e.Cancel = True

    End If

End If


全局表事件

DataColChanged

 

Dim IPAdress As System.Net.IPAddress

Dim HostName As String

Dim nics() As System.Net.NetworkInformation.NetworkInterface = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces

Dim NetMac = nics(0).GetPhysicalAddress.Tostring '获取网卡MAC  HardDiskId 硬盘ID ComputerId机器码

HostName = System.Net.Dns.GetHostName '获得本机的机器名

IPAdress = System.Net.Dns.GetHostByName(HostName).AddressList.GetValue(0) '获得本机的IP

 

If e.DataTable.Name <> "操作日志" And e.DataTable.Name <> "IC卡激活临时表" And e.DataTable.Name <> "导出专用临时表" Then

    If e.DataRow.RowState <> DataRowState.Added  And e.OldValue IsNot Nothing Then

        Dim dr As DataRow = DataTables("操作日志").AddNew

        dr("用户") = User.Name

        dr("IP") = IPAdress.ToString

        dr("MAC") = NetMac

        dr("涉及表") = e.DataTable.Name

        dr("涉及列") = e.DataCol.Name

        dr("涉及行") = e.DataRow("_Identify")

        dr("日期") = Date.Now

        dr("时间") = Date.Now

        dr("执行操作") = """" & e.OldValue &  """ 改成了 """ & e.NewValue & """"

        dr("类型") = "修改"

        dr("原始数据") = "不记录"

    End If

End If

 

DataRowDeleting

 

Dim IPAdress As System.Net.IPAddress

Dim HostName As String

Dim nics() As System.Net.NetworkInformation.NetworkInterface = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces

Dim NetMac = nics(0).GetPhysicalAddress.Tostring '获取网卡MAC  HardDiskId 硬盘ID ComputerId机器码

HostName = System.Net.Dns.GetHostName '获得本机的机器名

IPAdress = System.Net.Dns.GetHostByName(HostName).AddressList.GetValue(0) '获得本机的IP

 

If e.DataTable.Name <> "操作日志" And e.DataTable.Name <> "IC卡激活临时表" And e.DataTable.Name <> "导出专用临时表" Then

    If e.DataRow.RowState <> DataRowState.Added  Then

        Dim dr As DataRow = DataTables("操作日志").AddNew

        dr("用户") = User.Name

        dr("IP") = IPAdress.ToString

        dr("MAC") = NetMac

        dr("涉及表") = e.DataTable.Name

        dr("涉及列") = "所有列"

        dr("涉及行") = e.DataRow("_Identify")

        dr("日期") = Date.Now

        dr("时间") = Date.Now

        dr("执行操作") = "整行删除"

        dr("类型") = "删除"

        Dim str As String = ""

        For Each c As DataCol In e.DataTable.DataCols

            str += c.Name & "=" & e.DataRow(c.Name) & vbcrlf

        Next

        dr("原始数据") = str

    End If

End If




 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/12 15:11:00 [显示全部帖子]

这是最相关的。

费用项目_PrepareEdit

 

If Forms("费用项目").Opened Then

    If e.RecordGrid Is Nothing Then '如果不是在记录窗口输入数据

        e.Cancel = True '则取消输入

    Else

        If e.IsFocusCell Then

            If e.Col.name = "项目类别" AndAlso e.Row("收付") = 1 Then

                Dim tb As New DropTreeBuilder

                tb.SourceTable = DataTables("基础类别") '指定目录树表

                tb.TreeCols = "{类别归属}" '指定用于生成目录树的列,用大括号括起来

                tb.SourceCols = "类别名称"   ' 字符型,指定数据来源列

                tb.ReceiveCols = "项目类别" '指定数据接收列

                tb.TreeFilter = "[级别] > 0 And SubString([类别归属],1,6) = '收费项目类别'"

                tb.PathSeparator = "\" '指定路径分割符号

                ' e.Col.DropTree = tb.Build()

                Tables("费用项目_TableMoney").Cols("项目类别").DropTree = tb.Build()

            End If

        End If

    End If

End If

 

费用项目_DataColChanging

 

Select Case e.DataCol.Name

    Case "流程顺序"

        If e.DataRow("是否流程") And e.NewValue IsNot Nothing Then

            Dim dr As DataRow

            dr = e.DataTable.Find("流程顺序 = " & e.NewValue & "")

            If dr IsNot Nothing Then

                MessageBox.Show("此流程号已经存在!")

                e.Cancel = True

            End If

        ElseIf e.DataRow("是否流程") = False And e.NewValue IsNot Nothing Then

            If e.NewValue > 0 And e.NewValue <> 9999 Then

                MessageBox.Show("非流程项目设定流程顺序有特殊要求,具体请参考使用说明书!","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Error)

                e.Cancel = True

            End If

        End If

    Case "项目名称"

        Dim dr As DataRow

        dr = e.DataTable.Find("项目名称 = '" & e.NewValue & "'")

        If dr IsNot Nothing Then

            MessageBox.Show("已存在此项目,不能重复添加!","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Error)

            e.Cancel = True

        End If

    Case "代收费标准"

        If e.DataRow("是否代收费") = False Or e.DataRow.IsNull("代收费方式") Then

            MessageBox.Show("请先勾选是否代收费并选取代收费方式!","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Error)

            e.Cancel = True

        Else

            If  e.DataRow("代收费方式") = "比例" And e.NewValue > 1 Then

                MessageBox.Show("代收费方式为比例时标准不能大于1","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Error)

            End If

        End If

    Case "费用单价"

        If e.DataRow("固定收费") Then

            MessageBox.Show("固定收费,不可变更!","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Error)

            e.Cancel = True

        End If

End Select

 

费用项目_DataColChanged

 

Select Case e.DataCol.Name

    Case  "是否流程"

        If e.DataRow("是否流程") = False   Then

            e.DataRow("流程顺序") = Nothing

            e.DataRow("年审审核") = False

            e.DataRow("记录仪审核") = False

            e.DataRow("保险审核") = False

        End If

    Case "年审审核","记录仪审核","保险审核"

        If e.DataRow("是否流程") = False And e.DataRow(e.DataCol.Name) = True Then

            MessageBox.Show("只有流程项目才能审核!")

            e.DataRow(e.DataCol.Name) = False

        End If

End Select

 



 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/12 15:11:00 [显示全部帖子]

费用项目_BeforeSaveDataRow

 

Dim Dcount As Byte = e.DataTable.Compute("Count(是否流程)", "是否流程 = True")

Dim DMax As Byte = e.DataTable.Compute("Max(流程顺序)", "是否流程 = True")

 

If Dcount <> DMax Then

    MessageBox.Show("流程顺序有断号,请确保流程顺序是连续的","保存失败",MessageBoxButtons.OK,MessageBoxIcon.Error)

    e.Cancel = True

End If

 

If e.DataRow.IsNull("项目类别") Then

    MessageBox.Show("请为【" & e.DataRow("项目名称") & "】设定项目类别","保存失败",MessageBoxButtons.OK,MessageBoxIcon.Error)

    e.Cancel = True

End If

 

If e.DataRow.IsNull("费用单价") Then

    MessageBox.Show("请为【" & e.DataRow("项目名称") & "】设定单价","保存失败",MessageBoxButtons.OK,MessageBoxIcon.Error)

    e.Cancel = True

End If


窗体表事件

费用项目_AfterLoad

 

Tables("费用项目_TableMoney").SetHeaderRowHeight(31)

Tables("费用项目_TableMoney").Grid.ExtendLastCol = True

Tables("费用项目_TableMoney").LeftVisibleCol = 0

 

Tables("费用项目_TableMoney").Sort = "是否流程 Desc,流程顺序"

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")

tr.CreateTree("基础类别","类别归属","\","级别 > 0 And SubString([类别归属],2,5) = '费项目类别'")

 

Dim rgd As WinForm.RecordGrid = e.Form.Controls("RecordGrid1")

rgd.Table = Tables("费用项目_TableMoney") '指定绑定表

rgd.Build() '重新生成记录窗口

 

 

'Dim ComboType As WinForm.ComboBox = e.Form.Controls("ComboType")

'ComboType.ComboList = DataTables("基础类别").GetComboListString("类别名称", "[级别] = 1 And SubString([类别归属],1,6) = '收费项目类别'") & "|所有项目类别"


 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/12 15:29:00 [显示全部帖子]

以上代码 全注释 掉了,问题依旧,
其它编辑操作正常,只在窗体操作目录树后 出现死机,
具体操作是 单击记录窗控件 列目录树出现下拉也是正常的,不过如果单击选中节点赋值后,CPU快速上升,死机 

 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/12 15:45:00 [显示全部帖子]

可以呀,我其他 表 都是这样引用的。 MSSQL外部表,

 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:943 积分:7802 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/12 15:49:00 [显示全部帖子]

确认于目录树有关,我改用 手工或复制 输入都没有问题。

不过在 单独示例中 目录树使用正常(在窗体记录窗口对列应用目录树)

 回到顶部