以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]判断空行后删除  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=106553)

--  作者:xh2207
--  发布时间:2017/9/11 15:19:00
--  [求助]判断空行后删除

请指教:目的是将当前表中有空格的行删除,求的代码。因为Deletefor是datatable,而delete是窗口_table,但无法增加条件判断。

 


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

--  作者:有点甜
--  发布时间:2017/9/11 15:22:00
--  

Dim t As Table = e.form.controls("Table1").Table

t.DataTable.DeleteFor("品名 is null and 规格型号 is null")


--  作者:xh2207
--  发布时间:2017/9/12 10:14:00
--  

 版主,想增加一个条件判断窗口表规定的字段空值是否存在空值,提示后确认是删除,否则不删除。不懂,请指教怎定义r(怎完善代码)。非常感谢!

 

dim r as .....

If r.Isnull("品名")  Or  r.Isnull("型号规格")  Or  r.Isnull("计量单位") Or  r.Isnull("订货数量") = True Then
    If  MessageBox.show("规定的字段有空值,是否删除空值行后保存!","提示",MessageBoxButtons.YesNo) = DialogResult.Yes

            Dim t As Table = e.form.controls("订货明细表").Table
            t.DataTable.DeleteFor("品名 Is null  or 型号规格 Is null   or   计量单位 is null   or  订货数量  is null " )

   else

      return

   end if

end if


--  作者:有点甜
--  发布时间:2017/9/12 11:06:00
--  
Dim r As Row = e.form.controls("订货明细表").Table.Current
--  作者:xh2207
--  发布时间:2017/9/12 11:14:00
--  

这样只能删除当前行,假如表的行数有很多行,而空值行又不在第一行,每次afterload后当前行要么在第一行,要么在未行。若只能删除当前行,不符常规。

 

考虑过在代码前增加

FOR EACH.....

 

 

NEXT

 

但发觉空行在第一行是正常,在其他行是无法判断。

[此贴子已经被作者于2017/9/12 11:16:41编辑过]

--  作者:有点甜
--  发布时间:2017/9/12 11:43:00
--  
Dim t As Table = e.form.controls("订货明细表").Table
For i As Integer = t.rows.count-1 To 0 Step -1
    Dim r As Row = t.rows(i)
    If r.Isnull("品名")  Or  r.Isnull("型号规格")  Or  r.Isnull("计量单位") Or  r.Isnull("订货数量") = True Then
        If  MessageBox.show("规定的字段有空值,是否删除空值行后保存!","提示",MessageBoxButtons.YesNo) = DialogResult.Yes
           
            r.delete
        End If
    End If
   
Next

--  作者:xh2207
--  发布时间:2017/9/13 15:41:00
--  

请指教,如何完善窗口保存按键代码。想达到如下功能:

1、Tables("工程需求_订货明细表")的行数为零和行规定的字段有空值,不允许保存。

2、若有Tables("工程需求_订货明细表")行规定的字段有空值,删除后才能保存。

是否只能将判断代码放在表的beforesavedatarow或其他位置,请指教思路或完善代码,非常感谢!

 

 

If Tables("工程需求_订货明细表").Rows.Count =0 Then
    If MessageBox.Show("无明细,不保存!","请确认",MessageBoxButtons.YesNo,messageboxicon.question) = DialogResult.Yes Then
        Tables("订货主表").Current.Delete
        Tables("订货主表").Position =Tables("订货主表").Rows.Count - 1
        e.Form.Controls("datetimepicker1").text = Tables("订货主表").Current("订货日期")
        e.Form.Controls("TextBox1").text = Tables("订货主表").Current("订单号")
        e.Form.Controls("ComboBox1").text = Tables("订货主表").Current("订货人")
        e.Form.Controls("ComboBox2").text = Tables("订货主表").Current("工程类别")
        e.Form.Controls("DropBox1").text =Tables("订货主表").Current("工程名称")
        e.Form.Controls("DropBox2") .text= Tables("订货主表").Current("工程编号")
    End If
Else \'工程需求_订货明细表有行
    Dim t As Table = e.form.controls("订货明细表").Table
    For i As Integer = t.rows.count-1 To 0 Step -1
        Dim r As Row = t.rows(i)
        If r.Isnull("品名")  Or  r.Isnull("型号规格")  Or  r.Isnull("计量单位") Or  r.Isnull("订货数量") = True Then \'有空行
            If  MessageBox.show("有空值,不保存!是否删除空值行?","提示",MessageBoxButtons.YesNo) = DialogResult.Yes  \'是否删除\'
                r.delete \'删除\'
            Else
                Return \'不删,退出\'
            End If
        Else
            Return \'无空行
        End If
    Next
    For Each dr As Row In Tables("工程需求_订货明细表").Rows  \'删除后保存
        dr.save
        dr.locked = True
    Next
    DataTables("订货明细表").AllowEdit =False
    DataTables("订货主表").save
    Tables("订货主表").Current.locked = True
    DataTables("订货主表").AllowEdit =False
End If


--  作者:有点甜
--  发布时间:2017/9/13 15:50:00
--  

你需要一次性删除还是一行一行删除?

 

Dim t As Table = e.form.controls("订货明细表").Table
If t.rows.count = 0 Then
    msgbox("表格为空")
    Return
End If
For i As Integer = t.rows.count-1 To 0 Step -1
    Dim r As Row = t.rows(i)
    If r.Isnull("品名")  Or  r.Isnull("型号规格")  Or  r.Isnull("计量单位") Or  r.Isnull("订货数量") = True Then \'有空行
        If  MessageBox.show("有空值,不保存!是否删除空值行?","提示",MessageBoxButtons.YesNo) = DialogResult.Yes  \'是否删除\'
            r.delete \'删除\'
        Else
            Return \'不删,退出\'
        End If
    End If
Next


--  作者:xh2207
--  发布时间:2017/9/13 16:10:00
--  

现是一次性删除空行,一次一行呢,怎修改?

一次性删除空行后一次性保存保存功能代码?


--  作者:有点甜
--  发布时间:2017/9/13 16:31:00
--  

8楼的是一行一行删除。每删除一行弹出一个提示。

 

如果要整体删除,参考

 

Dim t As Table = e.form.controls("订货明细表").Table
If t.rows.count = 0 Then
    msgbox("表格为空")
    Return
End If
For i As Integer = t.rows.count-1 To 0 Step -1
    Dim r As Row = t.rows(i)
    If r.Isnull("品名")  Or  r.Isnull("型号规格")  Or  r.Isnull("计量单位") Or  r.Isnull("订货数量") = True Then \'有空行
        If  MessageBox.show("有空值,不保存!是否删除空值行?","提示",MessageBoxButtons.YesNo) = DialogResult.Yes  \'是否删除\'
            Exit For
        Else
            Return \'不删,退出\'
        End If
    End If
Next
For i As Integer = t.rows.count-1 To 0 Step -1
    Dim r As Row = t.rows(i)
    If r.Isnull("品名")  Or  r.Isnull("型号规格")  Or  r.Isnull("计量单位") Or  r.Isnull("订货数量") = True Then \'有空行
        r.delete
    End If
Next