以文本方式查看主题

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

--  作者:zhangchi96
--  发布时间:2017/2/22 20:58:00
--  改变当前列的方法是什么
在窗体中插入表,绑定表【职工信息】,鼠标选定了的列为【性别】,则当前列为“性别”,

在保存这个表时,为了不触发某些代码,要不论当前列是什么,都统一改为【身份证号】,请问怎么写代码?

--  作者:有点色
--  发布时间:2017/2/23 2:12:00
--  

 

 不理解你为什么要这样做,会触发什么事件什么代码?切换为 身份证号 又会怎样?


--  作者:zhangchi96
--  发布时间:2017/2/23 7:57:00
--  
在AfterSelchange 事件中我写了这样的代码,如果把当前列选定为身份证号,下面代码就不会执行了

Dim c As Col = e.Table.Cols(e.NewRange.ColSel)    \'C  为当前列
Dim dr As Row
dr = e.Table.Rows(e.NewRange.rowSel)   \'dr 为当前行
If C.Name <> "姓名" And C.Name <> "身份证号" Then \'如果正在编辑的是[..]列
    With DataTables("教职工历月信息")
        .DataRows.Clear()
    End With
    \'()---调数据库中的当月数据
    Dim mg As New Merger
    mg.SourcePath = ProjectPath &"\\Data\\数据库.mdb"    \'指定数据文件
    mg.SourceTableName = "职工信息"
    mg.DataTableName = "职工历月信息"
    mg.Filter = " 身份证号 = \'"& dr("身份证号") &"\' "
    mg.FieldMaps.Add("台帐年月","台帐年月")
    mg.FieldMaps.Add("身份证号","身份证号")
    mg.FieldMaps.Add("姓名","姓名")
    mg.FieldMaps.Add( C.Name ,"信息列")
    mg.Merge()
    \'-- 改列标题
    With DataTables("职工历月信息")
        .DataCols("信息列").Caption = C.Name
        .BuildHeader
    End With
End If

--  作者:有点蓝
--  发布时间:2017/2/23 9:09:00
--  
你这个逻辑有点矛盾。既然不想触发就不要写这个事件。
--  作者:有点色
--  发布时间:2017/2/23 11:23:00
--  

1、代码为什么写在AfterSelchange?单独做一个按钮处理不行?

 

2、你本来要做什么?在窗口不需要这个功能?


--  作者:zhangchi96
--  发布时间:2017/2/24 20:46:00
--  

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

【职工信息】表中显示的是2017年2月的职工信息,鼠标点击职工“李四”时,当前列为"月考分”,

要触发的理由:
    此时当前行为“李四”,当前列为“月考分”,希望在鼠标点击时引起触发AfterSelchange事件,然后就读取“李四”的2016年1月到2017年1月的信息,并读取到表“教职工历月信息”中,这样当前表是2017年2月信息,同时又能看到“李四”在以前各个月中的“”月考分“”,以观察该职工的月考分变化情况。

不要触发的理由:
     当对“职工信息”表进行逐行保存时,保存过程中设置了把每行作为当前行的语句,使得使用者能直观看到正在保存的行,但此时没有必要触发AfterSelchange事件的代码。

为此我希望在保存时,当前列改为“身份证号”列,多谢各位老师费心了,谢谢老师!
[此贴子已经被作者于2017/2/24 20:57:25编辑过]

--  作者:有点蓝
--  发布时间:2017/2/24 21:18:00
--  
定义一个全局变量做开关

AfterSelchange 事件
if vars("不处理") = false then
\'原AfterSelchange 事件代码
end if

保存时
vars("不处理")  = true
\'原保存代码
vars("不处理")  = false

--  作者:zhangchi96
--  发布时间:2017/2/24 22:39:00
--  
这个间接的方法我也想过,问这个问题就是也想了解一下,用代码设置当前列可不可以?
--  作者:有点蓝
--  发布时间:2017/2/24 22:50:00
--  
列名是没有办法改变的。

改标题的话就不要使用name来判断,使用Caption,可以试试把代码改成

If C.Caption <> "姓名" And C.Caption <> "身份证号" 

但是不建议这样做,用户体验很不好,用户会觉得莫名其妙,某个列突然就变了标题,而且标题和数据完全对应不上。

--  作者:zhangchi96
--  发布时间:2017/2/25 16:07:00
--  
谢谢老师,我就用7楼的方法,这个方法其他地方我也用过,挺有针对性,清楚明了,不容易引起莫名的错误。