Foxtable(狐表)用户栏目专家坐堂 → [求助]限制增加行数


  共有3132人关注过本帖树形打印复制链接

主题:[求助]限制增加行数

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2202 积分:18130 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]限制增加行数  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/4/10 17:17:00 [只看该作者]

DataRowAdded事件,写代码

 

e.datarow.delete


 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2202 积分:18130 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2018/4/10 17:40:00 [只看该作者]

这是个什么用法?
遍历再删除?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2202 积分:18130 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/4/10 22:37:00 [只看该作者]

就是有其它代码影响了。如果检查不到是什么代码
1、导入系统菜单,修改新增行菜单按钮代码,添加判断的代码
2、使用窗口按钮,添加判断的代码

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2202 积分:18130 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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()

执行又不会报任何错误。理论上讲,应当也会报错才对。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2202 积分:18130 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/4/11 9:48:00 [只看该作者]

这个具体有项目测试过才知道是什么原因了

 回到顶部
总数 11 1 2 下一页