苏州三木软件科技有限公司

 找回密码
 立即注册
搜索
热搜: 活动
查看: 3431|回复: 16

窗体里添加删除按钮出错

[复制链接]

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2022-10-9 21:11:46 | 显示全部楼层 |阅读模式
我想在窗体里手动添加一个删除按钮,但是刚进窗体的状态下,直接点这个删除按钮 报错,感觉好像是tblsub表没有加载的原因,这代码怎么改?还有,我代码这么写是否已经规范了,请指点!

Dim tblmain As SmGrid=Proj.CurrentClickedGridMenu.BaseGrid.BaseBaseGrid
Dim tblSub As SmGrid=tblmain.Relation.ChildrenGrids(0)
Dim djbh As String
Dim dr As RowData=tblmain.CurrentRowData
If dr IsNot Nothing Then
        djbh=tblmain.CurrentRowData("单据编号")
        tblsub.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
        tblmain.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
        tblmain.Save
        tblsub.Save
Else
        msgbox("请先选择某一行")
End If

回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-9 21:18:32 | 显示全部楼层
本帖最后由 SanmuGrid 于 2022-10-9 23:21 编辑

<Pre>
  1. Dim tblmain As SmGrid=Proj.CurrentClickedGridMenu.BaseGrid.BaseBaseGrid
  2. '先判断一下是否有子表或子表已经加载
  3. If tblmain.Relation.ChildrenGrids.Count>0 Then
  4.         Dim tblSub As SmGrid=tblmain.Relation.ChildrenGrids(0)
  5.         Dim djbh As String
  6.         Dim dr As RowData=tblmain.CurrentRowData
  7.         If dr IsNot Nothing Then
  8.                 djbh=tblmain.CurrentRowData("单据编号")
  9.                 '先删除子表
  10.                 tblsub.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
  11.                 '再删除主表
  12.                 tblmain.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
  13.                 tblmain.Save
  14.                 tblsub.Save
  15.         Else
  16.                 msgbox("请先选择某一行")
  17.         End If
  18.       
  19.         '如果是删除所有子表
  20.         If tblmain.CurrentRowData IsNot Nothing Then
  21.                 djbh=tblmain.CurrentRowData("单据编号")
  22.                 '先删除子表
  23.                 For Each item As IDataRuleGrid In tblmain.Relation.ChildrenGrids
  24.                         item.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
  25.                         item.BaseBaseGrid.Save()
  26.                 Next
  27.                 '再删除主表
  28.                 tblmain.DataTableHelp.DeleteFor("单据编号='" & djbh & "'")
  29.                 tblmain.Save
  30.         Else
  31.                 msgbox("请先选择某一行")
  32.         End If      
  33. End If
复制代码

回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-9 21:21:06 | 显示全部楼层
这种代码是没有考虑逻辑删除、孙表相关联表记录的删除的。需要自己看情况修改。
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2022-10-9 21:31:07 | 显示全部楼层
本帖最后由 13968559581 于 2022-10-9 21:32 编辑
SanmuGrid 发表于 2022-10-9 21:21
这种代码是没有考虑逻辑删除、孙表相关联表记录的删除的。需要自己看情况修改。 ...

'先判断一下是否有子表或子表已经加载
If tblmain.Relation.ChildrenGrids.Count>0 Then

我这个是窗体刚打开的时候,是不是子表没有加载,这个条件下我看你代码没有处理。这怎么处理呢

因为我发现是我这句代码直接引用有问题 Dim tblSub As SmGrid=tblmain.Relation.ChildrenGrids(0)

回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-9 21:43:38 | 显示全部楼层
13968559581 发表于 2022-10-9 21:31
'先判断一下是否有子表或子表已经加载
If tblmain.Relation.ChildrenGrids.Count>0 Then

好好看看我给你的代码。我注释了,也处理了,就是
If tblmain.Relation.ChildrenGrids.Count>0 Then
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2022-10-9 21:51:42 | 显示全部楼层
SanmuGrid 发表于 2022-10-9 21:43
好好看看我给你的代码。我注释了,也处理了,就是
If tblmain.Relation.ChildrenGrids.Count>0 Then ...

你这个判断我看到了,报错也没有了。但是实际的删除效果没有出来呀。也就是当我刚把主窗体 打开的时候,没有去双击打开子窗体的情况下,选择某一行,直接点这个删除按钮,数据删除不了,因为根据你这个判断直接跳过删除代码了。
回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-9 22:01:08 | 显示全部楼层
你子表没有加载你也删除不了呀。单独删除主表的话,你就不用写代码了。直接用系统现成的就可以了。
回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-9 22:02:15 | 显示全部楼层
实在不行,你可以在没有加载子表的情况下,直接用SQL语句到数据库后台直接删除子表。
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2022-10-9 22:06:40 | 显示全部楼层
SanmuGrid 发表于 2022-10-9 22:02
实在不行,你可以在没有加载子表的情况下,直接用SQL语句到数据库后台直接删除子表。 ...

我也想过直接在数据库里删除,但这里涉及到一个子表名称。如果以后 在 别的窗体的时候,这个子表名称又不一样了。 也就是说,我写的代码不通用了,我想写成通用型 ,有没有什么办法
回复

使用道具 举报

2

主题

22

帖子

112

积分

超级版主

Rank: 8Rank: 8

积分
112
QQ
发表于 2022-10-9 22:19:48 | 显示全部楼层
每个表的关联字段都不一样,你确定你能写好通用型的方法?唯一通用型的方法就是平台里面集成的删除功能。不过这个前提就是表加载之后。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|苏州三木软件科技有限公司 ( 苏ICP备2022038390号 )

苏公网安备 32058502010732号

GMT+8, 2024-10-6 04:44 , Processed in 0.099262 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表