以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]字典很卡求助  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145438)

--  作者:miaoqingqing
--  发布时间:2020/1/19 17:34:00
--  [求助]字典很卡求助
数据字典很卡,狐表菜单要等很久才能显示。
这样的数据字典在商用实际项目中是否可行?

求助优化,统一后台管理数据字典
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据词典很卡求助.foxdb


--  作者:有点蓝
--  发布时间:2020/1/19 20:11:00
--  
1、MainTableChanging事件会导致死循环,去掉,如果要打开窗口,到MainTableChanged事件写代码:
If MainTable.Name = "列项设置" Then
    Forms("列项设置").Open()
End If

2、这种数据字典的设置不适合放在prepareedit事件,会导致假死,放到AfterSelChange事件

Dim dr As DataRow
If e.OldRange.RowSel <> e.NewRange.RowSel OrElse e.OldRange.ColSel <> e.NewRange.ColSel Then
Dim c As Col = e.Table.Cols(e.NewRange.ColSel)
    If c.IsString Then
        dr=DataTables("列项设置").find("表名=\'" & e.Table.name & "\' and 列名=\'" & c.Name & "\' and 下拉选项 Is not null and 停用=false")
        If dr IsNot Nothing Then
            If dr("多值字段")=True Then
                DataTables(e.Table.name).DataCols(c.name).ExtendType = ExtendTypeEnum.Values
            ElseIf dr("多值字段")=False Then
                DataTables(e.Table.name).DataCols(c.name).ExtendType = ExtendTypeEnum.none
            End If
            c.AllowDirectType=dr("允许编辑")
            c.combolist=dr("下拉选项")
        Else
            c.combolist=""
        End If
    End If
End If

--  作者:miaoqingqing
--  发布时间:2020/1/20 11:16:00
--  回复:(有点蓝)1、MainTableChanging事件会导致死循...
群主,窗口控件录入时要根据 允许编辑的值  确定是否允许控件手动录入还是只能下拉选择录入,下面代码怎么修改? 求助

If e.Sender.Gettype.name = "ComboBox" AndAlso e.Sender.BindingField > "" Then
    Dim ary() As String = e.Sender.BindingField.Split(".")
    Dim filter As String = "表名 = \'" & ary(0) & "\' and 列名 = \'" & ary(1) & "\' and 停用 = false"
    Dim fdr As DataRow = DataTables("列项设置").Find(filter)
    \'If fdr IsNot Nothing Then
    If fdr IsNot Nothing And fdr("允许编辑") = True Then
            \'e.sender.AllowDirectType= True
            e.sender.ReadOnly= True
        e.sender.ComboList = fdr("下拉选项")
    End If
    If fdr IsNot Nothing And fdr("允许编辑") = False Then
            e.sender.ReadOnly= False
            \'e.sender.AllowDirectType= False
        e.sender.ComboList = fdr("下拉选项")
    End If
End If

--  作者:有点蓝
--  发布时间:2020/1/20 11:44:00
--  
代码放到enter事件

e.sender.ReadOnly= BooleanEnum.True  :http://www.foxtable.com/webhelp/topics/0749.htm

--  作者:miaoqingqing
--  发布时间:2020/1/20 12:17:00
--  
群主还有问题,第四列不允许编辑了,要能下拉选择,求助
--  作者:有点蓝
--  发布时间:2020/1/20 13:46:00
--  
    Dim fdr As DataRow = DataTables("列项设置").Find(filter)
    \'If fdr IsNot Nothing Then
    If fdr IsNot Nothing
        If fdr("允许编辑") = True Then
            \'e.sender.AllowDirectType= True
            e.sender.ReadOnly = BooleanEnum.False
            e.sender.ComboList = fdr("下拉选项")
        Else
            e.sender.ReadOnly = BooleanEnum.True
            \'e.sender.AllowDirectType= False
            \'e.sender.ComboList = fdr("下拉选项")
        End If
    End If

--  作者:miaoqingqing
--  发布时间:2020/1/20 14:25:00
--  回复:(有点蓝)    Dim fdr As DataRow =...
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:还是有不行.foxdb


--  作者:miaoqingqing
--  发布时间:2020/1/20 14:28:00
--  
群主,不能编辑的时候,还是不能下拉,辛苦再看看了
[此贴子已经被作者于2020/1/20 14:47:24编辑过]

--  作者:有点蓝
--  发布时间:2020/1/20 14:52:00
--  
不能编辑,当然也就不能下拉


If e.Sender.Gettype.name = "ComboBox" AndAlso e.Sender.BindingField > "" Then

    Dim ary() As String = e.Sender.BindingField.Split(".")
    Dim filter As String = "表名 = \'" & ary(0) & "\' and 列名 = \'" & ary(1) & "\' and 停用 = false"
    Dim fdr As DataRow = DataTables("列项设置").Find(filter)
    If fdr IsNot Nothing
        e.sender.ComboList = fdr("下拉选项")
        e.Sender.AllowEditValue = fdr("允许编辑")
    End If
End If

--  作者:miaoqingqing
--  发布时间:2020/1/20 15:34:00
--  
群主,表里可以了,但是在窗口里筛选失效,辛苦有空了再看看了
[此贴子已经被作者于2020/1/20 18:12:56编辑过]