如何在DataTable中操作行

ikuaifenglea 2008-12-03 05:32:55
如何在DataTable中增加行
如何在DataTable中修改行
如何在DataTable中删除行
...全文
1132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
amanizty 2008-12-03
  • 打赏
  • 举报
回复

DataTable myTable=DS.Tables["表名"]; --->添加
DataRow myNewRow=myTable.NewRow();
myNewRow["你要添加的列名"]="值";
myNewRow["你要添加的列名"]="值";
myTable.Rows.Add(myNewRow);
dg2.DataSource=myTable.DefaultView;
dg2.DataBind(); //将新添的数据邦定


DataRow[] myNewRow2=myTable.Select("id_jldw=11 AND name_jldw='内容'"); ----->修改
//myNewRow2[0]["要修改的列名"]=值;
myNewRow2[0]["要修改的列名"]=值;
myNewRow2[0]["要修改的列名"]=值;
dg3.DataSource=myTable.DefaultView;
dg3.DataBind();//将新添的数据邦定



myTable.Rows[0].Delete();//删除第一行 ---->删除
dg4.DataSource=myTable.DefaultView;
dg4.DataBind();



HDNGO 2008-12-03
  • 打赏
  • 举报
回复
6.5.1 添加新DataRow
DataTable对象有一个返回新DataRow对象的方法,该对象包含了表中每一列的信息。

DataRow row=ds.Tables[“Customers”].NewRow();

row[“CustomerID”]=”ALFKI”;

创建新的DataRow后,就可以使用它的item属性来填充不同的列,还可以使用item属性检查行中列的内容。

DataTable的NewRow方法创建一个新行,但并不会将该行添加到DataTable中。通常由于刚创建的行是空行,所以在新行刚创建时您并不希望添加新行。如果列没有默认值,该列就被设置为Null。

一旦给新行所有需要的列赋值后,就可以使用DataRowCollection的Add方法来将新行添加到DataTable中。如下:

ds.Tables[“Customers”].Rows.Add(row);


DataTable对象还提供了另一种方法来将新行添加到表中:LoadDataRow方法。使用该方法,需要给第一个参数提供一组数值,数组中的数值项与表中的列相对应;AcceptChanges是LoadDataRow方法的第二个参数,它允许控制新行DataRow的RowState属性值。下面代码中该值为false,则新行的RowState属性值为Added。

Object[] aValues={“ALFKI”,”alfreds Futterkiste”,”Maria Anders”,”030-0074321”};

ds.Tables["Customers"].LoadDataRow(aValues, false);

如果第二个参数的值为true,则新DaraRow的RowState值将为Unmodified,即表示该行不包含DataAdapter要提交给数据库的挂起更改。

6.5.2 修改当前行
有3种方法可以修改当前行。

1) 使用DataRow对象的item属性对列赋值。

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ANTON");

if (rowCustomer == null)

//Customer not found!

else {

rowCustomer["CompanyName"] = "NewCompanyName";

rowCustomer["ContactName"] = "NewContactName";

}

2) 与第一种类似,只是添加了BeginEdit 和 EndEdit 方法

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ANTON");

if (rowCustomer == null)

//Customer not found!

else {

rowCustomer.BeginEdit();

rowCustomer["CompanyName"] = "NewCompanyName";

rowCustomer["ContactName"] = "NewContactName";

rowCustomer.EndEdit();

}

使用BeginEdit 和 EndEdit 方法可以缓存对行的更改。此外,这种方式,在EndEdit前会阻止更新事件(如RowChanging, RowChanged, ColumnChanging, ColumnChanged)的发生。

3) 使用ItemArray属性。

同Item属性一样,使用ItemArray属性可以检索或修改行的内容,不同之处就在于Item属性一次只能处理一行,而ItemArray属性可以返回并接受对应列的一组项目。

object[] aCustomer={"ALFKI","NewCompanyName", "NewContactName", "NewPhoneNo"};

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer.ItemArray = aCustomer;

如果希望使用ItemArray属性,但是又不希望修改行中每一列的值,可以使用null关键字。

object[] aCustomer = {null, "NewCompanyName",

"NewContactName", "NewPhoneNo"};

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer.ItemArray = aCustomer;


6.5.3 处理DataRow的空值
DataRow对象有IsNull方法,可以查看列是否包含空值。同数据行对象的Item方法一样,IsNull方法接受列的名字、列在表中的索引或DataColumn对象。

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

if (rowCustomer.IsNull("Phone"))

Console.WriteLine("It's Null");

else

Console.WriteLine("It's not Null");


希望给列赋空值时,不必使用所选编程语言中的关键字Null,可以使用DBNull类的value属性。

DataRow rowCustomer;

rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");

rowCustomer["Phone"] = DBNull.Value;


6.5.4 删除DataRow
简单地调用DataRow的Delete方法就可以了。删除行并不是把它从DataTable中删掉,而是将行标志为挂起删除,以反映到数据库中。

6.5.6 清除DataRow
如果一定要从DataTable中清除行而不是将它标志为挂起删除,可以使用DataRowCollection类的Remove或RemoveAt方法。如果有对要删除的DataRow的引用,可以用前者;如果有索引编号,用后者。

此外,DataSet类和DataTable类分别包含了Clear方法,可以使用该方法从DataSet或DataTable中清除所有的DataRow对象而保留其结构。

6.5.7 使用DataRow.RowState属性
ADO.NET必须知道对DataRow所做修改的类型,这样以后才能成功地将更改提交给数据库。ADO.NET将此信息存储在DataRow中名为RowState的属性中,该属性用DataRowState枚举值通过查看属性可以知道行是否改动和修改类型(插入、删除或修改)。

DataRowState枚举值包括:

Unchanged 2 不包含任何挂起更改

Detached 1 该行不是DataTable的成员

Added 4 该行已被添加到DataTable中,却不在数据库中

Modified 16 该行包含挂起更改

Deleted 8 该行是一个挂起删除


6.5.8 检查DataRow中的挂起更改
依靠RowState属性可以浏览DataTable的内容并找到修改的行。

可以使用DataTable的Item属性来查看行中列的内容,Item属性可以接受DataRowVersion枚举中的第二个可选参数,DataRowVersion枚举包括:

Current 512 存储在列中的当前值

Original 256 存储在列中的原始值

Proposed 1024 列的建议值,只有当使用BeginEdit编辑行时有效

Default 1536 默认操作


注意:

Original值是从数据库中取得的值,不会改变。

删除行后无法访问Current,但可以访问Original

枚举中Default表示DataRow对象的Item属性中参数的默认值


如果不是正处于编辑行的过程中,那么调用Item并省略可选参数等价于将DataRowVersion.Current常数作为可选参数。如果是在编辑行的过程中,将得到列的Proposed值。

HDNGO 2008-12-03
  • 打赏
  • 举报
回复
dt.Rows.Add
dt.Rows.RemoveAt
本课程是PowerBI系列课程之DAX函数专题讲解,包含以下内容 1.  DAX函数基础知识什么是DAX函数数学函数:ABS、DIVIDE、MOD、RAND、ROUND、FIXED等日期和时间函数: CALENDAR、CALENDARAUTO、MONTH、YEAR、DATE、DT等信息函数:USERNAME、USERPRINCIPALNAME、HASONEFILTER、HASONEVALUE、ISFILTERED、ISCROSSFILTERED、ISINSCOPE、ISBLANK、SELECTEDMEASURE、SELECTEDMEASURENAME等逻辑函数:AND、OR、IF、IFERROR、SWITCH、TRUE、FALSE、COALESCE(官方文档含糊不清-结合实例)等关系函数:CROSSFILTER、RELATED、RELATEDTABLE等筛选器函数:FILTER、CALCULATE、ALL、ALLEXCEPT、ALLSELECTED、EARLIER、KEEPFILTERS、REMOVEFILTERS、SELECTEDVALUE、LOOKUPVALUE等父子函数:PATH、PATHCONTAINS、PATHITEM、PATHLENGTH等统计函数:AVERAGE、COUNT、MAX、MIN、SUM等迭代统计函数:AVERAGEX、COUNTX、MAXX、MINX、SUMX、RANKX等表函数: FILTERS 、ADDCOLUMNS、 SELECTCOLUMNS、 CROSSJOIN、 EXCEPT、 GENERATE、 GROUPBY、 SUMMARIZE、 SUMMARIZECOLUMNS、 TOPN、 TREATAS、 UNION、 VALUES、DISTINCT、DATATABLE、NATUALINNERJOIN、NATRUALLEFTOUTERJOIN等文本函数: EXACT、MID、 FIND、 LEN、 REPT、 LOWER、 UPPER、 UNICHAR等时间智能函数:DATEADD、DATESMTD、FIRSTDATE、LASTDATE、SAMEPERIODLASTYEAR等财务函数:2020.7之后发布的,和Excel财务函数相似,网页和demo pbix简单介绍其他函数:BLANK、ERROR、IFERROR等 DAX函数初体验:Max、Sum、Divide、if、Values等值函数表函数以及表和列的概念DAX函数术语、语法、运算符DAX运算符和引擎字母大小写问题DAX编程注释和快捷键DAX与Excel函数的共同点和区别(PPT)DAX、xmSQL与SQL表达式的区别(PPT)DAX函数的自学途径 2.  PowerBI数据建模知识维度建模关系传递和交叉筛选器方向-理解表关系(1v1, 1vM, Mv1,MvM)两个方向上应用安全筛选器关闭关系自动检测新建计算列新建度量值新建计算表:辅助表(五种方式)、日历表数据类型讲解数据格式控制:%、$、千位分隔符、小数位、日期格式Format函数自定义数据格式Convert函数做数据类型转换解决文数字单位 万 的显示问题Date和DT函数定义固定日期值显示和隐藏列DAX代码分析器阅读DAX表达式方法:从上至下、由内到外(注意Calculate的计算顺序)调试DAX表达式方法:分布输出或VAR输出3.  DAX函数原理 Vertipaq列式数据库原理理解度量值和计算列理解上下文和筛选上下文:Calculate示意图上下文使用VAR替代EARLIERVAR变量在定义时的上下文计算VAR变量是采用惰性计算(使用时计算)理解扩展表和RELATED函数理解数据沿袭Lineage 4.  开始感知DAX函数的强大DAX函数实现特殊符号的使用DAX函数实现切片器默认当前月或天DAX函数使切片器默认代表无任何选择DAX函数使切片器仅显示有数据的选项DAX函数使切片器反向筛选和计算DAX函数使切片器之间取并集DAX函数使关系多端的切片器筛选一端的切片器 DAX函数实现年月共同决定数据排序DAX函数实现动态图表标题DAX函数实现动态图表配色和图标DAX函数实现动态纵坐标DAX函数实现动态横坐标5.  理解重点DAX函数重之重FILTER 和 CALCULATE和CALCULATETABLE详解调节器REMOVEFILTERS和ALL、ALLEXCEPT函数调节器ALL、ALLSELECTED和ISINSCOPE占比分析调节器AllSELECTED和KEEPFILTERS的比较调节器USERELATIONSHIP激活关系调节器TREATAS动态建立关系调节器CROSSFILTER改变筛选器方向重点之ISFILTERED和ISCROSSFILTERED重点之HASONEVALUE和ISINSCOPE的区别重点之表函数SELECTEDCOLUMNS和ADDCOLUMNS重点之表函数NATUALINNERJOIN和NATRUALLEFTOUTERJOIN重点之表函数FILTERS和VALUES比较重点之VALUES和DISTINCT的区别重点之分组函数SUMMARIZECOLUMNS详解重点之函数LOOKUPVALUE vs RELATED vs VLOOKUP 重点之集合函数UNION、INTERSECT、EXCEPT重点之集合函数CROSSJOIN和GENERATE 笛卡尔积重点之值合并、列合并、表合并CONCATENATEX重点之BLANK产生的原因和BLANK相关函数重点之COALESCE函数处理空重点之FIRSTNOBLANK和FIRSTNOBLANKVALUE函数重点之使用VAR变量表的列重点之Error和IfError函数6.  实际案例-日期时间和时间智能相关关键点-日期表和事实表关联问题时间智能-同比环比分析时间智能-累计聚合、滚动聚合、移动平均时间智能-期初期末库存分析日期分析-计算任意所选月份的环比日期分析-周的同比环比和周聚合日期分析-指定月份的同比环比和季度环比日期分析-计算季末或季末月份的数据日期分析-趋势图根据最近月份取TopN日期分析-动态指定某个日期区间分析日期分析-动态任意区间段做数据对比日期分析-实现两个日期列的范围筛选日期分析-按工作日计算日期差日期分析-计算最近两次购买日期差日期分析-根据历史数据做销售预测日期时间函数和时间智能函数使用总结7.  实际案例-DAX函数进阶进阶-解决列排序对计算的影响进阶-实现切片器筛选之间的OR逻辑进阶-矩阵Matrix高亮显示最大值最小值进阶-DAX列转 vs 矩阵列转和逆透视进阶-非日期类型的累计聚合进阶-排名逻辑的4种实现-RANKX详解进阶-分组内排名的实现和理解迭代函数进阶-TopN/BottomN和Others的实现进阶-TopN实现动态指标进阶-TopN实现N的动态进阶-分组内动态TopN和Others 进阶-商品折上折-迭代函数SUMX详解 进阶-分析客户购买为进阶-找出无购买为的客户进阶-客户购买商品关联度分析 进阶-新客户分析进阶-流失客户分析进阶-回流客户分析进阶-客户购买频次和区间分析进阶-RFM客户价值分析进阶-帕累托分析进阶-盈亏平衡分析报表性能优化思路(PPT)  

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧