同一DataTable下创建多个结构数据相同的DataView的小问题

昨天在根据经理的要求修改公司后台的时候,遇到了一个很奇怪的问题

                DataView dvFocus = new DataView(ds.Tables[0]);
                DataView dvLook = new DataView(ds.Tables[0]);
                DataView dvNewUser = new DataView(ds.Tables[0]);
                DataView dvConsume = new DataView(ds.Tables[0]);
                DataView dvUsual = new DataView(ds.Tables[0]);

大概的意思就是用同一个DataTable来创建多个DataView,结构和数据都相同。

然后对前4个DataView使用RowFilter进行筛选,筛选完成之后,从最后一个DataView里剔除掉前面重复的数据

这个时候,问题就来了

                if (dvConsume.Count > 0)
                {
                    for (int i = 0; i < dvConsume.Count; i++)
                    {
                        for (int j = 0; j < dvUsual.Count; j++)
                        {
                            if (dvConsume[i]["UserID"].ToString() == dvUsual[j]["UserID"].ToString())
                            {
                                dvUsual[j].Delete();
                            }
                        }
                    }
                }

这个dvConsume里只有一行数据,并且我是放在最后进行筛选的,根据代码来看,应该是没什么问题的,可是

每次都会出现【索引 0 不是为负数,就是大于行数。】这个错误,让我很是郁闷,因为代码没有逻辑上的问题啊

由于哪会儿快下班了,于是就把问题放到了今天来解决

在此断点调试,比对数据,发现

dvUsual[j].Delete();

这个删掉的行会同步到每个DataView,我的天,原来问题出在这

然后我去百度DataTable下的多个DataView是否会同步,没有结果

于是想到了clone()这个方法,果断试了下,一运行,发现一条数据都没有了。

然后看了下clone()的描述,原来是复制结构和约束,不复制数据。

最后找到了Copy()这个方法,复制结构和数据,我心想应该可以了

运行,没报错。

问题解决

时间: 2024-11-05 13:51:02

同一DataTable下创建多个结构数据相同的DataView的小问题的相关文章

mysql命令行下创建和删除索引简介

mysql命令行下创建和删除索引简介: mysql中创建索引可以使用CREATE TABLE语句,也可以用CREATE INDEX或ALTER TABLE来给表增加索引.索引的删除可以使用ALTER TABLE或DROP INDEX语句来实现. (1)使用ALTER TABLE语句创建索引.语法如下:alter table table_name add index index_name (column_list) ;alter table table_name add unique (colum

eclipse maven工程中src/main/resources目录下创建的文件夹是包图标的解决方法

如图:在src/main/resources目录下创建的文件夹却以包的图标显示  修改方法: 入下图,按顺序1 ,2,3,4操作,把3处remove,在4处添加**  修改后如下:  然后点击完成后,文件夹图标显示正常了 

ROS下创建第一个节点工程

1.创建工作区 mkdir catkin_ws cd catkin_ws mkdir src 2.在src目录下创建包Myrobot,后面所跟roscpp rospy为依赖包 catkin_create_pkg Myrobot roscpp rospy 3.在Myrobot目录下创建src文件夹 mkdir src 4.进入上一步创建的src目录,创建程序文件hello.cpp,(此处文件名为hello) vim hello.cpp 5.创建完成后编写hello world程序 #include

解决Oracle在scott用户下创建视图(VIEW)权限不足的方法

问题描述:在scott用户下创建视图的时候,报错:权限不足.(其他用户以此类推)解决方法: 以dba用户登录 [sql] view plain copy print? sqlplus / as sysdba 赋予scott用户创建VIEW的权限 [sql] view plain copy print? grant create view to scott 以scott用户登录oracle [sql] view plain copy print? conn scott/tiger 创建视图成功 [

两种在linux下创建应用程序快捷方式的方法

两种在linux下创建应用程序快捷方式的方法: A. 在桌面上创建快捷方式 B. 在应用程序菜单中添加快捷方式 在桌面上创建快捷方式 这是最简单的一种方法,在桌面上单击鼠标右键,会有一个“创建启动器”栏.这里我以为mplayer创建快捷方式为例说明: 名称-mplayer(或者你喜欢的任何名称,这个名称会出现在快捷图标的 下方) 命令-/usr/bin/gmplayer(这个是mplayer的gui应用程序的执行文件,跟 安装路径相关,可以通过which gmplayer找到) 图标-一般应用程

如何在aix环境下创建DB2数据库

创建DB2(DB2认证 DB2培训 )数据库(数据库培训 数据库认证 )应该是每个DB2使用者都需要掌握的知识,下面就为您介绍在AIX(AIX认证考试 IBM AIX培训 )环境下创建DB2数据库的方法,如果您在创建DB2数据库方面遇到过问题,不妨一看. 查看环境变量 db2set 如果发现db2set中db2codepage不是819,执行 以下是代码片段: db2set db2codepage=819 db2 create database test05 on /home/db2inst1

CentOS 5.6下创建KVM虚拟机

首先要保证你的CPU支持虚拟化.执行以下命令查看CPU的flag信息,里面包含svm的flag就说明支持虚拟化: [[email protected] ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxe

Android下创建一个输入法

输入法是一种可以让用户输入文字的控件.Android提供了一套可扩展的输入法框架,使得应用程序可以让用户选择各种类型的输入法,比如基于触屏的键盘输入或者基于语音.当安装了特定输入法之后,用户即可在系统设置中选择个输入法,并在接下来的输入场景中使用该输入法.不过在任一时刻,只能使用一个输入法. 为了在安卓系统下创建一个输入法,需要新建一个包含扩展了InputMethodService类的安卓应用,并创建一个用于设置的activity,用户可以通过它将设置选项传给输入法的service,因此,你还需

在 asp.net core \ vs2015 update2 情况况下创建 asp.net core web application 的问题

这段期间, 想要做一些关于dashboard的东西,更为直接地观察数据. 所以找了很多关于做chart的工具, 有需要的可以点击链接,这里是我找到的15个最好的javascript chart library.(有些浏览器不能访问请注意!) ------------------------------------------ 现在是问题: 当我新建一个core application : TestDashboard 当然 是空项目. 下一步是加入引用(staticfiles) 引入完就会报错: