度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 10761|回复: 11

[分享] 网格部件调用DeleteFocusedRow()删除方法后循环DataTable报错的解决方法

  [复制链接]

348

主题

3572

帖子

9718

积分

论坛元老

Rank: 8Rank: 8

积分
9718
发表于 2020-7-28 16:02:49 | 显示全部楼层 |阅读模式
本帖最后由 万望 于 2015-9-28 16:07 编辑

错误事例:

error001

error001
代码脚本:
For each dr in 网格部件1.DataTable.Rows
  
If isnull(dr["数量"]) then
  
ShowInformation("数量不能为空")
  
end
  
end if
  
next
  

如上图所示这样的循环判断,如果在对网格部件1的数据进行过删除操作,也就是调用过:网格部件.DeleteFocusedRow()这样的方法,那么就会引发错误提示:不能通过已删除的上不能访问改行的信息。
分析原因:
删除时调用了DeleteFocusedRow()方法,数据已被标记成Deleted(Deleted=8)。
该行已通过 System.Data.DataRow 的 System.Data.DataRow.Delete() 方法被删除。
Deleted =8

解决办法:
循环里添加判断,判断该行是否被删除,在进行访问该行的数据:
For eachdr in网格部件1.DataTable.Rows
if dr.RowState<>8 then
if isnull(dr["人员ID"]) then
ShowInformation("请选择所有关系类型的关系人,不需要的可以右键删除。")
end
end if
end if
next

说明:判断dr的RowState属性可以判断当前访问行是否被标记为删除。
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

348

主题

3572

帖子

9718

积分

论坛元老

Rank: 8Rank: 8

积分
9718
 楼主| 发表于 2020-7-28 16:08:18 | 显示全部楼层
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

198

主题

1313

帖子

3806

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3806
发表于 2020-7-28 16:32:00 | 显示全部楼层
dr.RowState  还有那些值呢,分别代表什么?可以写全一些。
回复 支持 反对

使用道具 举报

67

主题

685

帖子

1815

积分

作者

Rank: 7Rank: 7Rank: 7

积分
1815
发表于 2020-7-28 16:37:37 | 显示全部楼层
哈哈,可以,很多人都不知道是什么原因造成的,其实就是判断一下行的状态是不是被删除了就行了
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
发表于 2020-7-28 18:13:53 | 显示全部楼层
回复

使用道具 举报

78

主题

634

帖子

1598

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1598
发表于 2020-7-28 08:59:44 | 显示全部楼层
    // 摘要:
    //     获取 System.Data.DataRow 对象的状态。
    [Flags]
    public enum DataRowState
    {
        // 摘要:
        //     该行已被创建,但不属于任何 System.Data.DataRowCollection。System.Data.DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
        Detached = 1,
        //
        // 摘要:
        //     该行自上次调用 System.Data.DataRow.AcceptChanges() 以来尚未更改。
       Unchanged = 2,
        //
        // 摘要:
        //     该行已添加到 System.Data.DataRowCollection 中,System.Data.DataRow.AcceptChanges()
        //     尚未调用。
       Added = 4,
        //
        // 摘要:
        //     该行已通过 System.Data.DataRow 的 System.Data.DataRow.Delete() 方法被删除。
        Deleted = 8,
        //
        // 摘要:
        //     该行已被修改,System.Data.DataRow.AcceptChanges() 尚未调用。
        Modified = 16,
    }
回复 支持 反对

使用道具 举报

78

主题

634

帖子

1598

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1598
发表于 2020-7-28 09:01:55 | 显示全部楼层
这个需要在VS中查看哈。几种状态和相应的值,我们在平台脚本对比时,需要用数值来比较。
回复 支持 反对

使用道具 举报

198

主题

1313

帖子

3806

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3806
发表于 2020-7-28 09:41:51 | 显示全部楼层
那以后可以用不同的值来判断状态了。
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9718

积分

论坛元老

Rank: 8Rank: 8

积分
9718
 楼主| 发表于 2020-7-28 21:35:01 | 显示全部楼层
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

348

主题

3572

帖子

9718

积分

论坛元老

Rank: 8Rank: 8

积分
9718
 楼主| 发表于 2020-3-8 11:16:37 | 显示全部楼层
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-4-16 19:22 , Processed in 0.162325 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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