以文本方式查看主题

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

--  作者:zcgmxf
--  发布时间:2017/1/15 19:31:00
--  [求助]加载行
老师,很忏愧,后面的加载 dr 代码竟然不会写了

Dim drs As List(of  DataRow) = DataTables("一类疫苗出库单").SQLSelect("出入库类型 = \'3\'")
For Each dr As DataRow In drs
    If dr IsNot Nothing Then
        Dim zs As List(of  DataRow) = dr.GetChildRows("一类疫苗出库表")
        If zs.Count <= 0 Then
            MessageBox.Show("有出库单没有出库明细,请及时删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        End If
   要加载 dr 代码
[此贴子已经被作者于2017/1/15 20:43:34编辑过]

--  作者:有点色
--  发布时间:2017/1/16 3:42:00
--  

 

DataTables("一类疫苗出库表").RemoveFor("_Identify = \'" & dr("_Identify") & "\'")
DataTables("一类疫苗出库表").AppendLoad("_Identify = \'" & dr("_Identify") & "\'")


--  作者:zcgmxf
--  发布时间:2017/1/19 17:40:00
--  

老师,怎么这两段代码都只加载第一行而不是找到的符合条件的行?MessageBox.Show 还是执行了,就是后面的加载行没执行,用 loadfilter 也一样。

Dim drs As List(of  DataRow) = DataTables("一类疫苗出库单").SQLSelect("出入库类型 = \'3\'")
For Each dr As DataRow In drs
    If dr IsNot Nothing Then
        Dim zs As List(of  DataRow) = dr.GetChildRows("一类疫苗出库表")
        If zs.Count <= 0 Then
            MessageBox.Show("有出库单没有出库明细,请及时删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)

            DataTables("一类疫苗出库单").RemoveFor("_Identify = \'" & dr("_Identify") & "\'")
            DataTables("一类疫苗出库单").AppendLoad("_Identify = \'" & dr("_Identify") & "\'")

            return

        End If
    end if
next
 
 
Dim  drs As List(of DataRow) = DataTables("一类疫苗出库单").SQLSelect("出入库类型 = \'3\' and 确认开单 = \'" & True & "\'")
For Each dr As DataRow In drs
    If dr IsNot Nothing Then
        For i As Integer = 0 To drs.Count - 1
            Dim crs As List(of DataRow) = drs(i).GetChildRows("一类疫苗出库表")
            If crs.Count <=0 Then
                MessageBox.Show("有出库单没有明细,请删除或添加明细后新增!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)                 
                DataTables("一类疫苗出库单").RemoveFor("出库单编号 = \'" & drs(i)("出库单编号") & "\'")
                DataTables("一类疫苗出库单").AppendLoad("出库单编号 = \'" & drs(i)("出库单编号") & "\'")
                Return
            End If          
        Next       
    End If
Next

--  作者:有点色
--  发布时间:2017/1/19 17:58:00
--  

 

 把 return去掉

 

 


--  作者:zcgmxf
--  发布时间:2017/1/19 21:34:00
--  

老师,去掉return 就进入死循环了。

 

算了,我自己再花点时间研究研究。谢谢你!

[此贴子已经被作者于2017/1/19 21:34:54编辑过]

--  作者:有点色
--  发布时间:2017/1/20 0:37:00
--  

 你代码写在哪里?怎么会死循环?

 

 最好做个例子上来测试吧。


--  作者:zcgmxf
--  发布时间:2017/1/20 8:30:00
--  
老师,代码放在按钮里面。目的就是增加行之前判断数据库中是否存没有明细的出库单,如果存在就提示并且加载该行。避免出现空单。
--  作者:有点蓝
--  发布时间:2017/1/20 9:01:00
--  
1、如果drs没有东西,for each里面的代码是不会执行的,如果有,里面的所有DataRow都不会是空的,所以下面判断代码是多余的

 If dr IsNot Nothing Then

2、第二个SQLSelect后面的代码用了二个for循环,不明白有什么作用,第二个 For i As Integer = 0 To drs.Count - 1有什么意义?

For Each dr As DataRow In drs
    If dr IsNot Nothing Then
        For i As Integer = 0 To drs.Count - 1

3、drs(i).GetChildRows("一类疫苗出库表")------自己和自己关联?不建议这样用,尽量分成父子表的模式

4、不知道你表结构怎么样,我觉得二个SQLSelect可以拼成一个用的