Foxtable(狐表)用户栏目专家坐堂 → 银行卡号如何变成4为一组以空格分开?


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

主题:银行卡号如何变成4为一组以空格分开?

帅哥哟,离线,有人找我吗?
一叶扁舟
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:184 积分:3279 威望:0 精华:0 注册:2011/2/20 6:24:00
  发帖心情 Post By:2012/7/11 15:36:00 [只看该作者]

可能我没有表达清楚。

如果把“衍生卡号”列设置为表达式列,因为我是用Datacolchanged事件修改该列的值,所以,不需要设置表达式,但这样的结果是,表达式列打开时,总是空的。

如果把“衍生卡号”列设置为数据列,我用Datacolchanged事件修改该列的值,修改完成后,可以手工修改这一列,我的问题是,如何用代码禁止编辑该列。

另外,狐爸提供的表达式解决方案不是普遍适用的,如果是5位卡号(现实中不存在这样的卡号),计算结果为空,如果卡号超长,计算结果也为空。


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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/7/11 15:51:00 [只看该作者]

1、如果“衍生卡号”是表达式列,那么此列的值由表达式决定,你不能在Datacolchanged修改此列的值。

2、如果“衍生卡号”是数据列列,不希望用户手工修改此列,可以将此列锁定:

http://www.foxtable.com/help/topics/0039.htm

3、我提供的是固定长度的解决方案,如果长度不固定,还是用数据列+代码解决。


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7236 积分:40591 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/7/11 16:11:00 [只看该作者]

随便用户怎么改,改了还回来,一个事件搞定:

 

If e.DataCol.Name = "银行卡号" Then '如果更改的是银行卡号列
    Dim S As String = e.DataRow("银行卡号")
    If e.DataRow.IsNull("银行卡号") = False Then '衍生卡号是否为空
        For i As Integer = 0 To  e.DataRow("银行卡号").Length \ 5 - 1
            s = s.Insert(5+5*i+i," ")
        Next
        e.DataRow("衍生卡号") = s
    End If
End If
If e.DataCol.Name = "衍生卡号" Then
    Dim dr As DataRow = e.DataRow
    DataTables("银行卡号").DataCols("银行卡号").RaiseDataColChanged(dr)
End If

[此贴子已经被作者于2012-7-11 16:11:40编辑过]

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7236 积分:40591 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/7/11 16:15:00 [只看该作者]

这样完善一点:

If e.DataCol.Name = "银行卡号" Then '如果更改的是银行卡号列
    Dim S As String = e.DataRow("银行卡号")
    If e.DataRow.IsNull("银行卡号") = False Then '衍生卡号是否为空
        For i As Integer = 0 To  e.DataRow("银行卡号").Length \ 5 - 1
            s = s.Insert(5+5*i+i," ")
        Next
        e.DataRow("衍生卡号") = s
    Else
        e.DataRow("衍生卡号") = Nothing
    End If
End If
If e.DataCol.Name = "衍生卡号" Then
    Dim dr As DataRow = e.DataRow
    DataTables("银行卡号").DataCols("银行卡号").RaiseDataColChanged(dr)
End If

 

下面是您的文件:

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:银行卡号.table


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


加好友 发短信
等级:小狐 帖子:309 积分:2344 威望:0 精华:0 注册:2012/6/23 11:15:00
  发帖心情 Post By:2012/7/11 16:57:00 [只看该作者]

谢谢

但是我用don给的放在表属性里面怎么调试不好用

 

图片点击可在新窗口打开查看

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


加好友 发短信
等级:小狐 帖子:309 积分:2344 威望:0 精华:0 注册:2012/6/23 11:15:00
  发帖心情 Post By:2012/7/11 17:03:00 [只看该作者]

谢谢。

这个我在么调试都不好用

图片点击可在新窗口打开查看
 

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7236 积分:40591 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/7/11 17:06:00 [只看该作者]

坐车上了才发现楼主需要4位一组,那就请自己将代码里面的5改为4,这里的两个数字可为任意数(您的要求间隔位数)

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2012/7/11 17:17:00 [只看该作者]

DrawCell事件(删除衍生卡号列)

If e.Col.Name = "银行卡号" Then 
    Dim n1,n2,n3 As Integer
    Dim s1,s2 As String
    s1=e.Row("银行卡号")
    If s1 >"" Then
        s1=s1.Replace(" ","")
        n3 = 4  '4个数1空
        n2 =s1.Length Mod n3
        For n1 =n3 To s1.length  Step n3
            s2+=s1.Substring(n1-n3,n3) & " "
        Next      
        e.Text = (s2 & Right(s1,n2)).Trim()
    End  If  
End If

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


加好友 发短信
等级:小狐 帖子:309 积分:2344 威望:0 精华:0 注册:2012/6/23 11:15:00
  发帖心情 Post By:2012/7/11 17:35:00 [只看该作者]

我这就一列,直接就是银行卡号,没有衍生的号码?代码改如何修改

 


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7236 积分:40591 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/7/11 17:47:00 [只看该作者]

当前字段的旧值替换掉空值再作上述外理,再写入当前字段,注意死循环问题!

 回到顶部
总数 25 上一页 1 2 3 下一页