以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  开发宝典之疑问一,DataColChanging验证,繁琐吗?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=131453)

--  作者:wohenguaia
--  发布时间:2019/2/26 17:07:00
--  开发宝典之疑问一,DataColChanging验证,繁琐吗?
如题,图片
图片点击可在新窗口打开查看


DataColChanged事件中将


Select case e.DataCol.Name
      Case "客户ID","折扣"
      dim dr as DataRow = e.DataRow
      Dim pr as DataRow = DataTables("客户").Find("客户ID = \'" & dr("客户ID") &  "\'")
      IF pr IsNot Nothing AndAlso pr("客户等级") = "vip"
         if dr("折扣") > 0.2 then
   dr("折扣") = 0.2
 end if
      elseIf dr("折扣") > 0.15 then
dr("折扣") = 0.15
       endif
end select

改到DataColChanging事件中

Select case e.DataCol.Name
      Case "客户ID","折扣"
      dim dr as DataRow = e.DataRow
      Dim pr as DataRow = DataTables("客户").Find("客户ID = \'" & dr("客户ID") &  "\'")
      IF pr IsNot Nothing AndAlso pr("客户等级") = "vip"
if e.NewValue > 0.2 then
     e.NewValue = 0.2
end if
      elseif  e.NewValue > 0.15 then
  e.NewValue = 0.15
      endif
end select
不就行了吗?麻烦吗?还是另有它意?
@狐狸爸爸  周老师说这部分是您写的,请您明示。

[此贴子已经被作者于2019/2/27 10:03:00编辑过]

--  作者:有点蓝
--  发布时间:2019/2/26 17:29:00
--  
不理解您说的繁琐是指什么意思?

在这里事件里dr("折扣")代表的是编辑前的数据,e.NewValue代表的是更改后的数据。如果要判断输入是否符合要求,当然是要判断更改后的数据

--  作者:有点甜
--  发布时间:2019/2/26 17:35:00
--  

要判断列名吧?

 

If e.datacol.name = "折扣" Then

    \'e.newvalue

End If


--  作者:有点甜
--  发布时间:2019/2/26 17:35:00
--  

具体问题,做个例子上来,说明你要做什么。


--  作者:wohenguaia
--  发布时间:2019/2/27 10:04:00
--  
以下是引用有点甜在2019/2/26 17:35:00的发言:

具体问题,做个例子上来,说明你要做什么。




抱歉问题没说清楚,我重新编辑了下帖子,请过目。


--  作者:有点甜
--  发布时间:2019/2/27 10:09:00
--  

datacolchanging事件不行。

 

e.newvalue 的值,是修改的列的值,可能是 【客户id】,也可能是 【折扣】,除非你改成

 

Select case e.DataCol.Name
      Case "折扣"
      dim dr as DataRow = e.DataRow

--  作者:wohenguaia
--  发布时间:2019/2/27 10:15:00
--  
这是书上的例子,我只想问问把这段代码移到DataColChanging中行不行?另外书中说的繁琐什么意思??
--  作者:有点甜
--  发布时间:2019/2/27 10:23:00
--  

改成,比如

 

Select Case e.DataCol.Name
    Case "折扣"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow = DataTables("客户").Find("客户ID = \'" & dr("客户ID") &  "\'")
        If pr IsNot Nothing AndAlso pr("客户等级") = "vip"
            If e.NewValue > 0.2 Then
                e.NewValue = 0.2
            End If
        ElseIf  e.NewValue > 0.15 Then
            e.NewValue = 0.15
        End If
End Select