欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

DataTable.ImportRow()与DataTable.Add()的区别

创建时间:2011年07月23日 14:03  阅读次数:(18933)
分享到:
今天无意间用到ImportRow()向DataTable中添加记录,代码如下:
private void AddAppendix(string fileName, string DbName)
{
DataTable dtAppendix = UpdateAppendix();
DataRow dr = dtAppendix.NewRow();
dr["Appendix"] = fileName;
dr["DbName"] = DbName;
dtAppendix.ImportRow(dr);
}

可是执行后发现dtAppendix中的记录并没有增加。可是将上述黄色代码换成dtAppendix.Rows.Add(dr);就可以了。后上网查了下资料弄清楚了原因。下面就说一下这两者的用法与区别及其适用情况。

1、首先,我们先说下DataTable.NewRow()方法,这个方法可以创建和表具有相同构架的DataRow(而且必须使用这个方法才能创建和原表一样构架的DataRow),并且这个新行是添加在原表上的。但是我发现这个DataTable中并没有这个空行。为什么?原因是这样的:原来Datatable中Rows都一个RowState属性,共有如下几种:

1,Detached 该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
2,Unchanged 该行自上次调用AcceptChanges以来尚未更改。
3,Added 该行已添加到DataRowCollection中,AcceptChanges尚未调用。
4,Deleted 该行已通过DataRow的Delete方法被删除。
5,Modified 该行已被修改,AcceptChanges尚未调用。

其实NewRow()创建的行其RowState是Detached,显而易见新建的行是不可见。
2、ImportRow()
将DateRow复制到DataTable中,保留任何属性设置以及初始值和当前值。但是当DataRow的RowState属性为Detached时无法复制,所以可见上述黄色代码不可行了。网上有人说不能复制是因为新建的行隶属于原表,我认为这是不正确,究其原因很是因为行的属性。其实如果我们把行的属性改变的话,ImportRow()方法还是可行的。
ImportRow()一般用于将一个表中的数据复制到另一个表中。实例代码如下:
private DataTable HowToUseImportRow(DataTable dt)
{
DataTable dtNew = dt.Clone();
foreach (DataRow dr in dt.Rows)
{
dtNew.ImportRow(dr);
}
return dtNew;
}

3、Add()
将制定的DataRow添加到DataRowCollection对象中。实例代码如下:
private void AddRow(DataTable table)
{
DataRowCollection rowCollection = table.Rows;
// Instantiate a new row using the NewRow method.

DataRow newRow = table.NewRow();
// Insert code to fill the row with values.

// Add the row to the DataRowCollection.
table.Rows.Add(newRow);
}

添加完后DataRow的RowState属性变为Added。所以把上述的dtAppendix.ImportRow(dr)改为dtAppendix.Rows.Add(dr)即可。
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 66+68=? 的结果(结果是:134)
结  果: