以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]利用控件给记录赋值的判断  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73559)

--  作者:ehomecd
--  发布时间:2015/8/21 14:31:00
--  [求助]利用控件给记录赋值的判断
我将组合框里的值赋给记录,
因为有时候要批量修改数据,
如何设定,让控件是空值时自动跳过,仅根据有值的控件对记录赋值?

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

我写了代码,但如果不涉及修改的控件是空值时,会用空值覆盖已有数据。
Dim bxr As WinForm.TextBox = e.Form.Controls("被选人")
Dim mr As WinForm.CheckBox = e.Form.Controls("默认")
Dim qj As WinForm.CheckBox = e.Form.Controls("请假")
Dim rq As WinForm.DateTimePicker = e.Form.Controls("日期")
Dim ld As WinForm.ComboBox = e.Form.Controls("路队")
Dim yc As WinForm.ComboBox = e.Form.Controls("用餐")
Dim wx As WinForm.ComboBox = e.Form.Controls("午休")
Dim zy As WinForm.ComboBox = e.Form.Controls("作业")
Dim tdyz As WinForm.ComboBox = e.Form.Controls("团队印章")
Dim cf As WinForm.ComboBox = e.Form.Controls("惩罚")
Dim yq As WinForm.ComboBox = e.Form.Controls("运气")
Dim sm As WinForm.TextBox = e.Form.Controls("说明")


If bxr.value IsNot Nothing Then
    
    Dim Multi As String = bxr.value
    Dim vls() As String = Multi.split(",")
    Dim lsh As String = Format(today,"yyyyMMdd") \'生成编号的前6位,4位年,2位月.2位日期
    For Each vl As String In vls
        Dim dr As DataRow = DataTables("学生信息").Find("姓名 = \'" & vl & "\'")
        If dr IsNot Nothing Then
            
            Dim dr2 As DataRow = DataTables("龙源宝藏").Find("流水号 = \'" & dr("学生编号") & "-" & lsh & "\'")
            If dr2 IsNot Nothing Then
                dr2("路队") = ld.value
                dr2("用餐") = yc.value
                dr2("午休") = wx.value
                dr2("作业") = zy.value
                dr2("团队印章") = tdyz.value
                dr2("惩罚") = cf.value
                dr2("运气") = yq.value
                dr2("说明") = sm.value
                
            Else
                Dim r As Row = Tables("龙源宝藏").AddNew
                r("姓名") = dr("姓名")
                r("单位") = dr("单位")
                r("学生编号") = dr("学生编号")
                r("日期") = Today
                r("流水号") = dr("学生编号") & "-" & lsh
                r("路队") = ld.value
                r("用餐") = yc.value
                r("午休") = wx.value
                r("作业") = zy.value
                r("团队印章") = tdyz.value
                r("惩罚") = cf.value
                r("运气") = yq.value
                r("说明") = sm.value
            End If
        End If
    Next
    
End If


--  作者:大红袍
--  发布时间:2015/8/21 14:39:00
--  

 

If ld.Value IsNot Nothing Then r("路队") = ld.value

If yc.Value IsNot Nothing Then r("用餐") = yc.value

--  作者:ehomecd
--  发布时间:2015/8/21 14:45:00
--  
必须一个一个写判断吗,有没有批量的或者更高效的方法?

或者我的这个设计思路是不是不够高效?

--  作者:大红袍
--  发布时间:2015/8/21 14:48:00
--  
必须一个一个的比较
--  作者:ehomecd
--  发布时间:2015/8/21 14:58:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:批量赋值2.png
图片点击可在新窗口打开查看

这部分的判断语句为什么不需要用
end if 来结束?
而且我为每一句加end if 的话,代码是错误的。

--  作者:大红袍
--  发布时间:2015/8/21 15:00:00
--  
如果只有一行代码,可以不写end if
--  作者:ehomecd
--  发布时间:2015/8/21 15:02:00
--  
不吝赐教,非常感谢。