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


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

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

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望: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编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2018/4/10 17:40:00 [显示全部帖子]

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

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望: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编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望: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()

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

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望: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编辑过]

 回到顶部