以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]限制增加行数 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=117321) |
-- 作者:chnfo -- 发布时间:2018/4/10 17:06:00 -- [求助]限制增加行数 如何限制一个表中,满足特定条件的情况的新增行数不超过指定的行数? 在beforeadddatarow事件中可以这样。 Dim count As Integer = DataTables("入库明细").Compute("count(_Identify)", "入库单编号 = \'" & Tables("入库").Current("入库单编号") & "\'") If count >= 100 Then e.Cancel = True End If 但如果在日常工作-增加行-增加多行中,直接输入200,也能增加200行。 怎么样既可以利用这个增加多行的功能,又能限制最多100行呢? 不是要自己定制一个窗口吧………………
[此贴子已经被作者于2018/4/10 17:14:50编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/4/10 17:17:00 -- DataRowAdded事件,写代码
e.datarow.delete |
-- 作者:chnfo -- 发布时间:2018/4/10 17:40:00 -- 这是个什么用法? 遍历再删除?
|
-- 作者:有点甜 -- 发布时间:2018/4/10 17:42:00 -- DataRowAdded事件
Dim count As Integer = DataTables("入库明细").Compute("count(_Identify)", "入库单编号 = \'" & Tables("入库").Current("入库单编号") & "\'")
If count >= 100 Then
e.datarow.delete
End If |
-- 作者:chnfo -- 发布时间:2018/4/10 21:59:00 -- 我倒,加入了DataRowAdded事件之后,使用日常工作-增加行-多行,输入120时,直接报出错误: .NET Framework 版本:2.0.50727.8762 Foxtable 版本:2018.3.9.1 错误所在事件: 详细错误信息: 此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据 但是没有提示错误所在的事件,实在难找。代码太多了。这咋查啊。 单独地建一个项目,独立测试这个功能,倒是没有问题。 我把这个表的其它所有事件全部注释掉,仍然会报出这个错误。 事件如下: Dim n As Integer = e.DataTable.Compute("count(_Identify)", "AID = \'" & x & "\'") ‘x是全局代码 If n > 10 Then systemready = False e.DataRow.delete MessageBox.Show("删除成功") systemready = True End If 在日常工作-增加行,输入12,执行时,先提示“删除成功”,说明多的行确实是删除了,但是接下来就是上面的报错。 报错窗口点击确定之后,在表中仍然加了设定的10行空行。 -----也就是报出错误,但是结果仍然是正确的。 [此贴子已经被作者于2018/4/10 22:06:16编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/4/10 22:37:00 -- 就是有其它代码影响了。如果检查不到是什么代码 1、导入系统菜单,修改新增行菜单按钮代码,添加判断的代码 2、使用窗口按钮,添加判断的代码
|
-- 作者:chnfo -- 发布时间:2018/4/11 1:12:00 -- 自己做了个窗口,代码如下: Dim t As Table = Tables("X") t.StopRedraw() systemready = False t.AddNew(val(e.Form.Controls("TextBox1").text)) t.DataTable.Save() systemready = True If t.Rows.Count > 10 Then For i As Integer = t.Rows.count - 1 To 10 Step -1 t.Rows(i).Delete() Next End If t.ResumeRedraw() 执行又不会报任何错误。理论上讲,应当也会报错才对。 |
-- 作者:有点蓝 -- 发布时间:2018/4/11 9:12:00 -- 直接判断可以添加的行数 Dim cnt As Integer = 10 - val(e.Form.Controls("TextBox1").text) If cnt > 0 Then Dim t As Table = Tables("X") t.AddNew(cnt) Else msgbox("已满10条记录") End If |
-- 作者:chnfo -- 发布时间:2018/4/11 9:26:00 -- 高见。 只是我很疑惑,直接做一个窗口来这样就可以,为什么在 datarowadded事件中就会报错呢。 而且我把表X除了beforeadddatarow、 datarowadded之外的表事件全部注释掉了,仍然会报错,但关闭报错窗口之后,仍然可以有正确的结果。 这样可能更合适一点,因为表X中可能已经有数据行了。 Dim t As Table = Tables("TbCon.TbL") Dim cnt As Integer = math.min(10 - t.Rows.count, val(e.Form.Controls("TextBox1").text)) If cnt > 0 Then t.AddNew(cnt) End If [此贴子已经被作者于2018/4/11 9:46:56编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/4/11 9:48:00 -- 这个具体有项目测试过才知道是什么原因了 |