先列出正确的写法,如果你只想马上改错就先复制吧,
如果你有时间想学习一下就继续看下面列出可能出错的可能性吧。
1.如果只是想删除datatable中的一行,可以用DataRow的delete,但是必须要删除后让DataTable知道,所以就要用到.AcceptChanges()方法,原因是这种删除只是标识性删除,就像我们通常在数据库中用到的IsDelete字段。
2.彻底删除就要用到datatable的.Rows.Remove(DataRow dr)方法,同理也只是删除一行可以,如果要循环删除请继续往下看。
3.循环彻底删除就要用.Rows.RemoveAt(int index)方法,所以如果你是foreach的爱好者,在此请你换换口味,还有如果你是for的i++的忠实fans也希望你能换个思维。先看一下上面程序的正向写法(错误的,不可用)
这个的错误在于datatable的RemoveAt()会在删除后更新dataTable的index,所以你要删除的index可能已经不是你的符合Convert.ToInt32(dt.Rows[i]["RowID"])==RowID的index了,甚者还会抛出异常,说你访问的index不存在。
所以要从DataTable的下面往上查找删除,这样即使这行符合条件被删除了,上面的行依旧不受影响。
说了这么多,不知道你明白了吗?其实现在写这种文章显得有点"弱智",技术学多了,越来越觉得自己的基础不够扎实,希望通过在此记录一下可以督促一下自己,也希望能给初学者带去丝丝帮助。
操纵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();
分享到:
相关推荐
在处理大量数据时,有时我们需要删除DataTable中的特定行或多行。本篇将详细介绍如何在C#中有效地实现DataTable的多行删除功能。 首先,了解DataTable的基本结构。DataTable通常作为DataSet的一部分使用,它可以...
本文实例讲述了C#中DataTable删除行的方法,分享给大家供大家参考之用。具体实现方法如下: 自己的删除例子(drTemp是表,gvSummary是dev 的gridview。单击右键点击grid删除): 1、dtTemp.Rows.RemoveAt(gvSummary....
对DataTable进行数据操作时,经常会涉及到对行进行删除的操作。在这个过程中,了解如何正确地使用Delete()和Remove()两种不同的方法是非常重要的,因为它们的使用场景和效果有所不同。 首先,我们来看Delete()方法...
在本文中,将介绍如何通过Ajax技术来解决在使用JQuery DataTable删除行之后页面更新的问题。 首先,我们需要了解DataTable插件提供了服务器端处理(Server-side processing)的选项。这意味着前端DataTable可以与...
`DataTable`允许添加列、行和约束,以适应不同需求。例如,添加一个`Int32`类型的列: ```csharp dataTable.Columns.Add("Column1", typeof(Int32)); ``` 添加一行数据: ```csharp DataRow newRow = dataTable....
当我们需要根据特定条件从DataTable中删除某一行时,可以采用多种方法。本文将详细介绍如何在C#中实现这一功能,特别是针对标题和描述中提到的“根据ID删除行”的情况。 首先,我们需要一个已经填充了数据的...
允许标记某行数据为删除状态,但不会立即从表中移除,需调用`DataTable.AcceptChanges()`或`DataTable.RejectChanges()`来最终确认或撤销这一操作。 #### 二、列操作:追加与删除 对于列的操作主要包括列的添加和...
总结,DataTable是.NET中处理数据的重要工具,通过创建、添加列和行、批量赋值、数据操作和与UI控件绑定等方式,我们可以方便地在内存中管理和展示数据。对于初学者来说,熟练掌握DataTable的使用,是提升编程能力的...
DataRow 是 DataTable 的基本组成部分,代表 DataTable 中的一行数据。 DataRow 主要包括四种信息:行中每一列的当前值、行中每一列的原始值、行状态、父行与子行间的链接。 初始化一个 DataRow 可以通过 NewRow() ...
3. 删除数据:通过`Rows.Remove()`或设置`RowState`为Deleted来删除行。 4. 查询数据:DataTable提供强大的查询能力,可以通过`Select()`方法配合表达式进行筛选。 四、DataTable与数据库的交互 1. DataAdapter:...
RowFilter是DataView的一个属性,用于根据指定的条件筛选DataTable中的行。它可以基于列的值、比较运算符和其他逻辑表达式来过滤行。例如,`"FieldName = 'Value'"`将返回FieldName列值为'Value'的所有行。我们可以...
3. **列操作**:你可以添加、删除或重命名DataTable的列。例如,使用`addvars`添加新列,`removevars`移除列,`renamevars`更改列名。 4. **数据访问**:DataTable支持通过变量名或索引直接访问数据,使得代码更易...
- **添加/删除行**:使用 `Rows.Add` 和 `Rows.Remove` 方法。 - **排序**:使用 `DefaultView.Sort` 属性进行排序。 - **筛选**:使用 `DefaultView.RowFilter` 属性进行筛选。 - **更新数据源**:使用 `...
通过`DataTable`,我们可以创建、读取、更新和删除数据,就像在数据库中执行CRUD操作一样。 在C#中,创建一个新的`DataTable`对象非常简单,只需要调用`DataTable`的构造函数即可。例如: ```csharp DataTable ...
- 当调用 `Update()` 方法时,DataAdapter 会检查 DataTable 中的更改(添加、删除、更新的行),并生成相应的 SQL 语句。对于 UPDATE 语句,它会使用 WHERE 子句来定位要更新的行,通常是基于主键或其他唯一标识符...
而DataTable则更像一个二维表,它支持行和列的概念,能够方便地对数据进行排序、筛选等操作,并且非常适合作为数据库查询结果的容器或者作为数据绑定的源。 #### 二、List与DataTable的区别 1. **数据存储**: - ...