Foxtable(狐表)用户栏目专家坐堂 → [求助] 全局表事件 PrepareEdit


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

主题:[求助] 全局表事件 PrepareEdit

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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
[求助] 全局表事件 PrepareEdit  发帖心情 Post By:2016/6/15 15:26:00 [只看该作者]

是否窗口中用 Fill 方法载入的sqltable  表在编辑时不能触发  全局表事件 PrepareEdit   ?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/15 15:47:00 [只看该作者]

 必须绑定事件

 

DataTables("ABC").GlobalHandler.PrepareEdit = true


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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2016/6/15 17:08:00 [只看该作者]

大红袍老师:
我设了一个内部函数   打开表的全局事件
'----------打开表的全局事件--------------------------------------------------------------------------
Dim strDataTableName As String = args(0)
DataTables(strDataTableName).GlobalHandler.KeyDown = True
DataTables(strDataTableName).GlobalHandler.PrepareEdit = True
DataTables(strDataTableName).GlobalHandler.startEdit = True
DataTables(strDataTableName).GlobalHandler.afterEdit = True

'Datatables(strDataTableName).AllowCopyHeader = True  '复制表中内容的时候,是否包括列名,默认为False

DataTables(strDataTableName).GlobalHandler.BeforeLoad = True
DataTables(strDataTableName).GlobalHandler.BeforeSaveDataRow = True
DataTables(strDataTableName).GlobalHandler.BeforeDeleteDataRow = True
DataTables(strDataTableName).GlobalHandler.BeforeAddDataRow = True




然后在窗体的afterload中加了下面代码,  但好象全局事件并没有绑定,请老师看看代码有什么问题?

Dim tblSenser As Table = e.Form.Controls("tblSenser").Table
'tblSenser.Fill("select [_identify],敏感ID,数据表名,列名称,说明 f rom {敏感字段}",gs_strActiveConn,False)
tblSenser.Fill("select * f rom 敏感字段",gs_strActiveConn,False)
Functions.Execute("打开表的全局事件", tblSenser.DataTable.name) '调用内部函数对新载入的表进行全局事件绑定
tblSenser.AllowAddNew=True
tblSenser.AllowEdit=True
tblSenser.AllowDelete=True
tblSenser.AllowLockRow=True  '允许锁定行
tblSenser.AllowUnlockRow=True '允许解锁行
tblSenser.SetColVisibleWidth("敏感ID|80|数据表名|150|列名称|100|说明|100")
tblSenser.ExtendLastCol = True
tblSenser.Cols("敏感ID").AllowEdit = False '敏感ID不能手工编辑
tblSenser.Cols("数据表名").AllowDirectType = False '是否允许用户直接输入不在列表项目中的内容
tblSenser.Cols("列名称").AllowDirectType = False '是否允许用户直接输入不在列表项目中的内容
tblSenser.Cols("数据表名").ComboList = String.join("|",Connections(gs_strActiveConn).GetTableNames.ToArray)
tblSenser.Cols("列名称").ComboList = ""  'GetComboListColumnName(CurrentTable.Current("数据表名"),gs_strActiveConn)


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/15 17:15:00 [只看该作者]

 那你在prepareEdit加入代码,看有没有触发

 

Output.Show(e.Table.Name & "   " & date.Now)


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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2016/6/15 17:26:00 [只看该作者]

触发了,正常了,刚才是其它地方出问题了:

在锁定列设置窗体中,将listbox的列表项目自动选中设为false后,复选框在首次单击时不切换状态,导致选择的不可编辑列混乱了

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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2016/6/15 17:38:00 [只看该作者]

老师:我将istbox的SelectedIndexChanged事件的代码放到ItemCheck事件中后,出现错误:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

事件代码如下:
'****************************************************************************************************
'lstColumns_SelectedIndexChanged
'选择不同项目后执行
'====================================================================================================
Dim lstColumns As WinForm.CheckedListBox = e.Form.Controls("lstColumns")
Dim txtVisibleWidth As WinForm.TextBox = e.Form.Controls("txtVisibleWidth")
Dim cmbTableName As WinForm.ComboBox = e.Form.Controls("cmbTableName")
Dim strWidth As String= txtVisibleWidth.Text
If lstColumns.GetItemChecked(lstColumns.SelectedIndex)= False Then
    strWidth = strWidth & "|" & lstColumns.SelectedValue
Else
    Dim strArray() As String= strWidth.Split("|")
    For i As Integer= 0 To strArray.Length-1
        If strArray(i)= lstColumns.SelectedValue Then
            strArray(i)=""
            Exit For
        End If
    Next
    strWidth=""
    For i As Integer= 0 To strArray.Length-1
        If strArray(i).length>0 Then
            strWidth = strWidth & "|" & strArray(i)
        End If
    Next
End If
txtVisibleWidth.Text = strWidth.Trim("|")
'****************************************************************************************************




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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/15 17:49:00 [只看该作者]

Dim lstColumns As WinForm.CheckedListBox = e.Form.Controls("lstColumns")
Dim txtVisibleWidth As WinForm.TextBox = e.Form.Controls("txtVisibleWidth")
Dim cmbTableName As WinForm.ComboBox = e.Form.Controls("cmbTableName")
Dim strWidth As String= txtVisibleWidth.Text
If e.Checked = False Then
    strWidth = strWidth & "|" & e.sender.Items(e.Index)
Else
    Dim strArray() As String= strWidth.Split("|")
    For i As Integer= 0 To strArray.Length-1
        If strArray(i)= e.sender.Items(e.Index) Then
            strArray(i)=""
            Exit For
        End If
    Next
    strWidth=""
    For i As Integer= 0 To strArray.Length-1
        If strArray(i).length>0 Then
            strWidth = strWidth & "|" & strArray(i)
        End If
    Next
End If
txtVisibleWidth.Text = strWidth.Trim("|")

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


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2016/6/15 17:50:00 [只看该作者]

加了一个判断的代码后,好了

事件代码如下:
'****************************************************************************************************
'lstColumns_SelectedIndexChanged
'选择不同项目后执行
'====================================================================================================
Dim lstColumns As WinForm.CheckedListBox = e.Form.Controls("lstColumns")
Dim txtVisibleWidth As WinForm.TextBox = e.Form.Controls("txtVisibleWidth")
Dim cmbTableName As WinForm.ComboBox = e.Form.Controls("cmbTableName")
Dim strWidth As String= txtVisibleWidth.Text
if lstColumns.SelectedIndex <> -1 then
If lstColumns.GetItemChecked(lstColumns.SelectedIndex)= False Then
    strWidth = strWidth & "|" & lstColumns.SelectedValue
Else
    Dim strArray() As String= strWidth.Split("|")
    For i As Integer= 0 To strArray.Length-1
        If strArray(i)= lstColumns.SelectedValue Then
            strArray(i)=""
            Exit For
        End If
    Next
    strWidth=""
    For i As Integer= 0 To strArray.Length-1
        If strArray(i).length>0 Then
            strWidth = strWidth & "|" & strArray(i)
        End If
    Next
End If
endif
txtVisibleWidth.Text = strWidth.Trim("|")
'*********************************************************

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/15 17:51:00 [只看该作者]

 看7楼

 回到顶部