C# datatable 不能通过已删除的行访问该行的信息处理方法
- 作者: 留下神评再走
- 来源: 51数据库
- 2021-08-13
原因如下:
delete()之后需要datatable.acceptechanges()方法确认完全删除,因为delete()只是将相应列的状态标志为删除,
还可以通过datatable.rejectchanges()回滚,使该行取消删除。
如果要彻底删除datarow,需要delete()和acceptechanges()方法同时使用,或者采用datatable.rows.removeat(i)方法直接删除,
其中i表示行索引,还有一个就是datatable.rows.remove(datarow dr)删除指定行。
不过使用datatable.rows.removeat(i)要注意,如果连续使用datatable.rows.removeat(0);datatable.rows.removeat(1);
这时并不是删除了原表中的0,1行,而是删除0行后,原来的1行就变成了0行,所以datatable.rows.removeat(1)实际删除的是原表的2行。
所以还是要慎用datatable.rows.removeat(i),若要删除多行,可以连续用delete(),然后采用acceptechanges()方法确认删除。
解决方案实例:
list<string> lst = new list<string>();
for (int i = 0; i < _table.rows.count; i++)
{
if (_table.rows[i].rowstate!=datarowstate.deleted)
{
lst.add(_table.rows[i]["i_sl"].tostring() == "0" ? "false" : "true");
}
}
delete()之后需要datatable.acceptechanges()方法确认完全删除,因为delete()只是将相应列的状态标志为删除,
还可以通过datatable.rejectchanges()回滚,使该行取消删除。
如果要彻底删除datarow,需要delete()和acceptechanges()方法同时使用,或者采用datatable.rows.removeat(i)方法直接删除,
其中i表示行索引,还有一个就是datatable.rows.remove(datarow dr)删除指定行。
不过使用datatable.rows.removeat(i)要注意,如果连续使用datatable.rows.removeat(0);datatable.rows.removeat(1);
这时并不是删除了原表中的0,1行,而是删除0行后,原来的1行就变成了0行,所以datatable.rows.removeat(1)实际删除的是原表的2行。
所以还是要慎用datatable.rows.removeat(i),若要删除多行,可以连续用delete(),然后采用acceptechanges()方法确认删除。
解决方案实例:
复制代码 代码如下:
list<string> lst = new list<string>();
for (int i = 0; i < _table.rows.count; i++)
{
if (_table.rows[i].rowstate!=datarowstate.deleted)
{
lst.add(_table.rows[i]["i_sl"].tostring() == "0" ? "false" : "true");
}
}
推荐阅读
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0
