datatable删除行

先列出正确的写法,如果你只想马上改错就先复制吧,如果你有时间想学习一下就继续看下面列出可能出错的可能性吧。1.如果只是想删除datatable中的一行,可以用DataRow的delete,但是必须

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

先列出正确的写法,如果你只想马上改错就先复制吧,

protected void deleteDataRow(int RowID,DataTable dt)  
    {  
        for (int i = dt.Rows.Count - 1; i >= 0; i--)  
        {  
            if (Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID)  
                dt.Rows.RemoveAt(i);  
        }  
    }  /* 何问起 hovertree.com */

如果你有时间想学习一下就继续看下面列出可能出错的可能性吧。

  1.如果只是想删除datatable中的一行,可以用DataRow的delete,但是必须要删除后让DataTable知道,所以就要用到.AcceptChanges()方法,原因是这种删除只是标识性删除,就像我们通常在数据库中用到的IsDelete字段。

  2.彻底删除就要用到datatable的.Rows.Remove(DataRow dr)方法,同理也只是删除一行可以,如果要循环删除请继续往下看。

  3.循环彻底删除就要用.Rows.RemoveAt(int index)方法,所以如果你是foreach的爱好者,在此请你换换口味,还有如果你是for的i++的忠实fans也希望你能换个思维。先看一下上面程序的正向写法(错误的,不可用)

for (int i = 0, j = dt.Rows.Count; i < j; i++)  
        {  
            if (Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID)  
                dt.Rows.RemoveAt(i);  
        }  /* 何问起 hovertree.com */

这个的错误在于datatable的RemoveAt()会在删除后更新dataTable的index,所以你要删除的index可能已经不是你的符合Convert.ToInt32(dt.Rows[i][“RowID”]) == RowID的index了,甚者还会抛出异常,说你访问的index不存在。

  所以要从DataTable的下面往上查找删除,这样即使这行符合条件被删除了,上面的行依旧不受影响。

说了这么多,不知道你明白了吗?其实现在写这种文章显得有点”弱智”,技术学多了,越来越觉得自己的基础不够扎实,希望通过在此记录一下可以督促一下自己,也希望能给初学者带去丝丝帮助。

 http://hovertree.com/menu/csharp/

 

操纵dataset
在DataSet中DataRow是其所有数据的基本存放位置,它主要是由一个值数组组成,代表DataTable单独一行。
DataRow中主要包括一下几种信息:1、行中每一列的当前值,2、行中每一列的原始值,3、行状态,4、父行与子行间的链接

初始化一个DataRow:
DataTable dataTable=dataSet.Tables[0];
DataRow newRow=dataTable.NewRow(); //用dataTable生成DataRow可以利用dataTable里面的模式
dataTable.Rows.Add(newRow);

删除行:
DataTable.Rows.Remove(行实例);
DataTable.Rows.RemoveAt(行号);
DataRow.Delete(); //行自身移除

读写DataRow的值:
row[“列名”],row[列号]均可引用其中的一个属性
DataColumn a=dataTable.Columns(“列名”); //可以获得一个列

对行进行批处理更改:
BeginEdit()开始更改,EndEdit()结束更改,同时将更改结果写入DataSet,CancelEdit(),取消更改
例如:
row.BeginEdit();
对row进行更改
row.EndEdit();

http://www.cnblogs.com/roucheng/p/csfetch.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120490.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • HTML期末设计——代码篇[通俗易懂]

    HTML期末设计——代码篇[通俗易懂]事先声明这个网页设计也就是用了我学到的知识做的一个中规中矩的网页,可以给以后的大一新生们做个参考,和商业网站的效果肯定是没得比的,期望太高的可以关掉了,要严词批评我的请不要在我这说,当然,温柔的话,可以引入页效果图:<!DOCTYPEhtml><html> <head> <metacharset=”utf-8″> <title>欢迎来到香氛密语</title> <style>

  • UCOSII系统移植详解「建议收藏」

    UCOSII系统移植详解「建议收藏」一,移植UCOSII操作系统的CPU前提条件1,处理器的C编译器能产生可重入型的代码,如果不行的话,那么就不能在任务之间随意的切换,因为当你切换到别的任务的时候,该任务在这个函数的数据就会被破坏。2,处理器CPU支持中断,并能产生定时中断3,用C语言就可以开关中断,进行任务切换4,处理器CPU能够支持一定数量的数据存储硬件堆栈,也就是栈5,处理器有将堆栈指针以及其他的CPU的寄存器的内容读出,并存储到堆栈或者内存中去的指令。任务切换的时候,需要将当前的CPU指针保存到刚刚执行的任务当中。

  • svn 冲突解决办法(黄色感叹号)

    svn 冲突解决办法(黄色感叹号)

    2021年10月19日
  • 【软件工程】详细设计说明书

    【软件工程】详细设计说明书详细设计说明书1引言1.1编写目的说明编写这份详细设计说明书的目的,指出预期的读者。该文档实在概要设计的基础上,进一步的细化系统结构,展示了软件啊结构的图标,物理设计,数据结构设计,及算法设计,详细的介绍了系统各个模块是如何实现的,包括涉及到的算法,逻辑流程等,为下一步系统的实现和测试做准备!1.2背景说明:a.软件名称:机房收费系统;b.本项目的任务提出者:米新江…

  • mysql 10061解决方法

    mysql 10061解决方法

  • 使用随机函数rand()和srand()来产生三个_随机函数怎么按

    使用随机函数rand()和srand()来产生三个_随机函数怎么按srand函数是随机数发生器的初始化函数。原型:voidsrand(unsignedintseed);srand和rand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号